Advertisement
jasirgo

Cronómetro digital Arduino v3

Mar 10th, 2014
4,234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  Cronómetro, creado por Javier Sirgo Blanco http://zygzax.com/webpcronometro/
  3.  
  4.  Imprime por pantalla el tiempo desde que se pulsa/activa el sensor START/STOP
  5.  hasta que se vuelve a pulsar/activar por segunda vez. El boton RESET(No el de
  6.  la placa arduino, sino el conectado al pin 7) resetea el cronometro a 0.
  7.  El tiempo se imprime de la forma Minutos:Segundos:Milisegundos.
  8.  Cuando se activa o pulsa un sensor/boton suena un pitido de confirmación.
  9.  
  10.  PATILLAGE LCD:
  11.  LCD VSS     a gnd
  12.  LCD VDD     a 5v
  13.  LCD RS      al pin 12
  14.  LCD ENABLE  al pin 11
  15.  LCD D4      al pin 5
  16.  LCD D5      al pin 4
  17.  LCD D6      al pin 3
  18.  LCD D7      al pin 2
  19.  
  20.  POTENCIOMETRO 1 10K (Contraste):
  21.  Conectado a 5v y a gnd. Conectado a LCD V0
  22.  
  23.  SENSORES/PULSADORES:
  24.  Sensor START/STOP    al pin 6 (Se activa con señal LOW)
  25.  Pulsador RESET       al pin 7 (Se activa con señal LOW)
  26.  
  27.  ZUMBADOR:
  28.  Conectado al pin 10 y a gnd
  29.  
  30.  RETROILUMINACION:
  31.  POTENCIOMETRO 2 10K conectado a 5v y a gnd. Conectado a LCD BLA
  32.  LCD BLK conectado a gnd
  33.  
  34.  */
  35.  
  36. #include <LiquidCrystal.h>                //Incluimos la libreria que contiene las funciones del display LCD
  37.  
  38. int m, mu=0,md=0;                          //Declaramos las variables que vamos a usar
  39. int s, su=0,sd=0;
  40. int l, lu=0,ld=0,lc=0;
  41. int pulsador,antes,despues;
  42. long int tiempo,inicio;
  43. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);    //Configuramos las Entradas/Salidas a las que esta conectado el LCD
  44. byte accent_o[8] = {                      //Opcional (Creamos un caracter para la o con tilde que no esta
  45.                                           //predefinida en el display)
  46.   B00010,                                 //Creamos un array de 8 elementos (filas del caracter) en cada uno
  47.                                           //de los elementos
  48.   B00100,                                 //establecemos que pixels de la fila se encienden(1) y cuales se apagan(0)
  49.   B00000,
  50.   B01110,
  51.   B10001,
  52.   B10001,
  53.   B01110,
  54. };
  55.  
  56. void setup() {
  57.   lcd.createChar(0, accent_o);            //Guardamos el caracter accent_o creado en el lugar 0 de la memoria del LCD
  58.   lcd.begin(16, 2);                       //Establecemos el tamaño del display (16 caracteres de largo y 2 lineas de alto)
  59.   lcd.print("___Cron");                      //Imprimimos "___Cron"
  60.   lcd.write(byte(0));                     //Seguido imprimimos la "o" con tilde que definimos anteriormente
  61.   lcd.print("metro___");                     //Imprimimos a continuacion el resto "metro___"
  62.   lcd.setCursor(4, 1);                    //Situamos el comienzo de la siguiente impresion de datos en el caracter 5
  63.                                           //(comienza a contar en el 0)
  64.   lcd.print("00:00:000");                 //y en la segunda linea empezando por arriba(comienza a contar en 0)
  65.                                           //Imprimimos "00:00:000"
  66.   pinMode(6, INPUT);                      //Ponemos el pin 6 como entrada para el Sensor START/STOP
  67.   pinMode(7, INPUT);                      //Ponemos el pin 7 como entrada para el Pulsador RESET
  68.   pinMode(10,OUTPUT);                     //Ponemos el pin 10 como salida para mandar la señal al zumbador
  69.   antes=HIGH;                             //Ponemos la variable antes a HIGH
  70.   despues=HIGH;                           //Ponemos la variable despues a HIGH
  71. }
  72.  
  73. void loop() {
  74.   if(digitalRead(7)==LOW){                //Si el pin 7 esta LOW
  75.     analogWrite(10,100);                  //Mandamos una señal PWM con valor 100 al pin 10 (zumbador)
  76.     lcd.setCursor(4, 1);                  //Nos ponemos en el LCD en la segunda linea caracter 5
  77.     lcd.print("00:00:000");               //Escribimos 00:00:000 (Ponemos el cronometro a 0)
  78.     delay(200);                           //Establecemos un retardo de 200ms
  79.     analogWrite(10,0);                    //Apagamos el zumbador
  80.   }
  81.   despues=digitalRead(6);                 //Guardamos en la variable despues el valor del pin6 (sensor start/stop)
  82.   if(despues==LOW&&antes==HIGH){          //Si el valor que tenia era HIGH y ahora tiene LOW sera porque lo hemos activado
  83.     analogWrite(10,100);                  //Mandamos una señal PWM con valor 100 al pin 10 (zumbador)
  84.     inicio=millis();                      //Guardamos en inicio el tiempo que se lleva ejecutando el programa hasta que
  85.                                           //se activa el sensor start/stop
  86.     antes=despues;                        //cambiamos el valor de la variable antes al que tiene la variable despues
  87.     pulsador=0;                           //Ponemos la variable pulsador a 0
  88.     delay(200);                           //Establecemos un retardo de 200ms
  89.    
  90.     while(pulsador==0){                   //Cuando la variable pulsador sea 0
  91.       tiempo=millis()-inicio;            //Calculamos el tiempo que paso desde que se activo el sensor start/stop
  92.      
  93.       m=(tiempo/1000)/60;                 //Calculamos los minutos
  94.       mu=m%10;                            //Descomponemos los minutos y sacamos el valor de las unidades
  95.       md=(m-mu)/10;                       //Descomponemos los minutos y sacamos el valor de las decenas
  96.      
  97.       s=(tiempo/1000)%60;                 //Calculamos los segundos
  98.       su=s%10;                            //Descomponemos los segundos y sacamos el valor de las unidades
  99.       sd=(s-su)/10;                       //Descomponemos los segundos y sacamos el valor de las decenas
  100.      
  101.       l=(tiempo%1000);                    //Calculamos las milesimas de segundo
  102.       lu=l%10;                            //Descomponemos las milesimas y sacamos el valor de las unidades
  103.       ld=((l-lu)/10)%10;                  //Descomponemos las milesimas y sacamos el valor de las decenas
  104.       lc=(l-(ld*10)-lu)/100;              //Descomponemos las milesimas y sacamos el valor de las centenas
  105.      
  106.       lcd.setCursor(4, 1);                //Ponemos el cursor en la linea 2 y el caracter 5
  107.       lcd.print(md);                      //Imprimimos los valores en el display
  108.       lcd.print(mu);              
  109.       lcd.print(":");
  110.       lcd.print(sd);
  111.       lcd.print(su);
  112.       lcd.print(":");
  113.       lcd.print(lc);
  114.       lcd.print(ld);
  115.       lcd.print(lu);
  116.  
  117.       despues=digitalRead(6);             //Guardamos en la variable despues el valor del pin6 (sensor start/stop)
  118.       analogWrite(10,0);                  //Apagamos el zumbador
  119.       if(despues==LOW&&antes==HIGH){      //Si el valor que tenia era HIGH y ahora tiene LOW sera porque hemos activado
  120.                                           //el sensor
  121.         analogWrite(10,100);              //Mandamos una señal PWM con valor 100 al pin 10 (zumbador)
  122.         antes=despues;                    //cambiamos el valor de la variable antes al que tiene la variable después
  123.         pulsador=1;                       //Ponemos la variable pulsador a 1
  124.         delay(200);                       //Establecemos un retardo de 200ms
  125.         analogWrite(10,0);                //Apagamos el zumbador
  126.       }
  127.       antes=despues;                      //cambiamos el valor de la variable antes al que tiene la variable despues
  128.     }
  129.   }
  130.   antes=despues;                          //cambiamos el valor de la variable antes al que tiene la variable despues
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement