Advertisement
Villalba2006

POST_15

Nov 24th, 2016
12,454
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.05 KB | None | 0 0
  1. /*  TITULO: Cronómetro con display LCD 1602
  2.  
  3.     AUTOR:
  4.    
  5.     MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
  6.     - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
  7.     - TWITTER: https://twitter.com/MarianoCampoGa
  8.     - CORREO: marianodc83@gmail.com
  9.    
  10.    
  11.     DESCRIPCIÓN DEL PROGRAMA
  12.  
  13.     Con este programa obtenemos un cronómetro en formato HH:MM:SS, que nos muestra el tiempo en un display
  14.     LCD 1602 mediante comunicación I2C. Si presionamos el pulsador_inicio, el conteo se pone a cero. En
  15.     cambio, cuando presionamos el pulsador
  16.    
  17.  
  18.     ESQUEMA DE CONEXION
  19.    
  20.                                       +-----+
  21.          +----[PWR]-------------------| USB |--+
  22.          |                            +-----+  |
  23.          |         GND/RST2  [ ][ ]            |
  24.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |   SCL del módulo I2C conectado al LCD 1602
  25.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |   SDA del módulo I2C conectado al LCD 1602
  26.          |                             AREF[ ] |
  27.          |                              GND[ ] |
  28.          | [ ]N/C                    SCK/13[ ] |  
  29.          | [ ]IOREF                 MISO/12[ ] |  
  30.          | [ ]RST                   MOSI/11[ ]~|  
  31.          | [ ]3V3    +---+               10[ ]~|   PA(I)
  32.          | [ ]5v    -| A |-               9[ ]~|   PA(P)
  33.          | [ ]GND   -| R |-               8[ ] |  
  34.          | [ ]GND   -| D |-                    |
  35.          | [ ]Vin   -| U |-               7[ ] |  
  36.          |          -| I |-               6[ ]~|  
  37.          | [ ]A0    -| N |-               5[ ]~|  
  38.          | [ ]A1    -| O |-               4[ ] |  
  39.          | [ ]A2     +---+           INT1/3[ ]~|  
  40.          | [ ]A3                     INT0/2[ ] |  
  41.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  42.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  43.          |            [ ] [ ] [ ]              |
  44.          |  UNO_R3    GND MOSI 5V  ____________/
  45.           \_______________________/
  46.  
  47.   NOTAS:
  48.  
  49.     - Los pulsadores suelen tener dos pines, que vamos a denominar PA y PB (si es de 4 sólo usamos 2 de ellos)
  50.        - pulsador_inicio --> Terminales PA(I) y PB(I).
  51.        - pulsador_pausa --> Terminales PA(P) y PB(P).
  52.     - Conexión PULL-DOWN de los pulsadores.
  53.        - PB(I) y PB(P) conectados a VCC.
  54.        - PA(I) y PA(P) conectados a GND a través de una R=10K omhs (cada uno con su resistencia por separado).  
  55.     - La alimentación y la masa del módulo LCM 1602 I2C V1 van directamente conectadas a VCC (+5V) y GND
  56.       respectivamente.
  57. */
  58.  
  59.  
  60.   // Importar librerías
  61.   #include <Wire.h>
  62.   #include <LiquidCrystal_I2C.h>
  63.   LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  64.  
  65.   // Variables para los cálculos internos del cronómetro
  66.   int horas = 0;
  67.   int minutos = 0;
  68.   int segundos = 0;
  69.   int decimas = 0;
  70.   long milisegundos = 0;
  71.  
  72.   int pulsador_inicio = 10; // pulsador_inicio en PIN digital 10
  73.   int pulsador_pausa = 9; // pulsador_pausa en PIN digital 9
  74.  
  75.   void setup()
  76.   {
  77.     Serial.begin(9600); // Comienzo de la comunicación serie
  78.     pinMode(pulsador_inicio, INPUT); // Pin digital 10 como entrada  
  79.     pinMode(pulsador_pausa, INPUT); // Pin digital 9 como entrada
  80.    
  81.     // Inicializamos el LCD
  82.     lcd.begin(16,2);
  83.     lcd.backlight();
  84.   }
  85.  
  86.   void loop()
  87.   {
  88.     // Si presionamos el pulsador de inicio se pone todo a cero
  89.     if(digitalRead(pulsador_inicio) == HIGH)
  90.     {
  91.       horas = 0;
  92.       minutos = 0;
  93.       segundos = 0;
  94.       decimas = 0;
  95.       lcd.clear();
  96.     }
  97.    
  98.     // Si presionamos el pulsador de pausa se congela el tiempo hasta que lo volvamos a presionar
  99.     if(digitalRead(pulsador_pausa) == HIGH)
  100.     {
  101.       delay(200);
  102.       while(digitalRead(pulsador_pausa) == LOW);
  103.       delay(200);
  104.     }
  105.    
  106.     // Se cuentan los milisegundos transcurridos
  107.     milisegundos = millis();
  108.    
  109.     // Si el tiempo transcurrido es mayor a una décima de segundo
  110.     if(milisegundos % 100 == 0)
  111.     {
  112.       decimas++;
  113.       // Si han pasado 10 décimas de segundo se cuenta un segundo
  114.       if(decimas == 10)
  115.       {
  116.         decimas = 0;
  117.         segundos++;
  118.       }
  119.       // Si han pasado 60 segundos se cuenta un minuto
  120.       if(segundos == 60)
  121.       {
  122.         segundos = 0;
  123.         minutos++;
  124.       }
  125.       // Si han pasado 60 minutos se cuenta una hora
  126.       if(minutos == 60)
  127.       {
  128.         minutos = 0;
  129.         horas++;
  130.       }
  131.      
  132.       // Mostramos el tiempo a través del LCD
  133.       lcd.setCursor(0,0);
  134.       if(horas < 10)
  135.       {
  136.         lcd.print("0");
  137.       }
  138.       lcd.print(horas);
  139.       lcd.print(":");
  140.       lcd.setCursor(3,0);
  141.       if(minutos < 10)
  142.       {
  143.         lcd.print("0");
  144.       }
  145.       lcd.print(minutos);
  146.       lcd.print(":");
  147.       lcd.setCursor(6,0);
  148.       if(segundos < 10)
  149.       {
  150.         lcd.print("0");
  151.       }
  152.       lcd.print(segundos);
  153.       lcd.print("(");
  154.       lcd.setCursor(9,0);
  155.       lcd.print(decimas);
  156.       lcd.print(")");
  157.     }    
  158.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement