Revista Tecnología

Arduino TUTORIAL parte 14: Temporizador

Publicado el 25 septiembre 2013 por Guille

En esta entrada hemos hecho un temporizador o cuenta atrás. Mediante unos pulsadores puedes poner las horas, minutos y segundos que quieras y mediante otro pulsador inicias la cuenta atrás.
El esquema de este proyecto es:
Arduino TUTORIAL parte 14: Temporizador
El código es este:
#include <LiquidCrystal.h> //Libreria del display LCD#define TONO_ERROR 600#define TIME_INTERVAL 3000
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //Inicializamos la libreria con el numero de los pines a utilizar
int buzzer = 4;   //Alarmaint ahoras = 0;   //Variable a mostrar por LCD de las horasint aminutos = 0;   //Variable a mostrar por LCD de los minutosint asegundos = 0;   //Variable a mostrar por LCD de los segundosint segundostotal = 0;   //Tiempo totalint msg= 0;   //Barrera para el mensaje de bienvenida
int start = A1;   //Pulsador de arranqueint empieza = 1024;   // Variable para almacenaje del pulsador de arranque
int buth = A5;   //Pulsador de Horasint butm = A4;     //Pulsador de Minutosint buts = A3;   //Pulsador de segundos
int varbuth = 0;   //Variable para almacenar el valor del pulsador de horasint varbutm = 0;   //Variable para almacenar el valor del pulsador de minutosint varbuts = 0;   //Variable para almacenar el valor del pulsador de segundos
void setup(){   lcd.begin(16, 2);   // Configuramos el numero de columnas y filas del LCD.        pinMode(buzzer, OUTPUT);  //Pin de alarma --> Salida   pinMode(buth, INPUT);   //Pin de pulsador de horas --> Entrada   pinMode(butm, INPUT);   //Pin de pulsador de minutos --> Entrada   pinMode(buts, INPUT);   //Pin de pulsador de segundos --> Entrada   pinMode(start, INPUT);   //Pin de pulsador de arranque --> Entrada      msg = 0;   //Barrera del mensaje de bienvenida   empieza = 1024;   //Barrera de arranque      varbuth = 1;   //Barrera de horas   varbutm = 1;   //Barrera de minutos   varbuts = 1;   //Barrera de segundos      Serial.begin(9600);}
void loop(){   if(msg==0)   //Mostramos el mensaje de bienvenida solo una vez   {   lcd.setCursor(0,0);   lcd.print("Temporizador con");   lcd.setCursor(1,1);   lcd.print("Arduino + LCD");   delay(2500);   msg = 1;   lcd.clear();   }      //-------------------------------------------------------------------------------------------------      // LECTURA DE LOS BOTONES Y ELECCIÓN DEL TIEMPO, NO SALE DEL BUCLE HASTA PULSAR   // EL BOTON DE ARRANQUE   //-------------------------------------------------------------------------------------------------      do      {      varbuth = analogRead(buth);   //Leemos boton de horas   varbutm = analogRead(butm);   //Leemos boton de minutos   varbuts = analogRead(buts);   //Leemos boton de segundos      if(varbuth > 0)   //Si el boton ha sido pulsado, aumentamos las horas en una unidad   {   ahoras = ahoras + 1 ;   delay(250);   }        if(varbutm > 0)   //Si el boton ha sido pulsado, aumentamos los minutos en una unidad   {   aminutos = aminutos + 1;   if(aminutos == 60) aminutos = 0;   delay(250);   }        if(varbuts > 0)   //Si el boton ha sido pulsado, aumentamos los segundos en una unidad   {   asegundos = asegundos + 1;   if(asegundos == 60) asegundos = 0;   delay(250);   }        lcd.setCursor(0,0);   lcd.print("Elige el tiempo");  //Muestra mensaje y las HH:MM:SS que vayamos aumentando      lcd.setCursor(4,1);  
   if (ahoras < 10) lcd.print("0");   // Si las horas son menor que 10, pone un "0" delante.   lcd.print(ahoras);   // Sin este codigo, se muestra asi: H:M:S  (1:M:S)   lcd.print(":");
   if (aminutos < 10) lcd.print("0");  // Si los minutos son menor que 10, pone un "0" delante.   lcd.print(aminutos);   // Sin este codigo, se muestra asi: H:M:S  (H:1:S)
   lcd.print(":");   if (asegundos < 10) lcd.print("0"); // Si los segundos son menor que 10, pone un "0" delante.   lcd.print(asegundos);   // Sin este codigo, se muestra asi: H:M:S  (H:M:1)         } while(analogRead(start) == 0);  // Se repite el menu de elegir tiempo hasta que pulsemos el boton de arranque.      segundostotal = asegundos + (aminutos * 60) + (ahoras * 60 * 60);  //Convierte el tiempo elegido en segundos!!      //-------------------------------------------------------------------------------------------------   // UNA VEZ PULSADO EL BOTON DE ARRANQUE Y ACUMULADO EL TIEMPO, ENTRA EN EL SIGUIENTE WHILE   // Y NO FINALIZA HASTA TERMINAR LA CUENTA.   //-------------------------------------------------------------------------------------------------
     while (segundostotal > 0)   {   delay (1000);   //Descontamos en periodos de 1 segundo   segundostotal--;         ahoras = ((segundostotal / 60)/ 60);   //Convertimos los segundos totales en horas   aminutos = (segundostotal / 60) % 60;  //Convertimos los segundos totales en minutos   asegundos = segundostotal % 60;   //Convertimos los segundos totales en periodos de 60 segundos
   lcd.setCursor(0,0);   lcd.print("Tiempo restante");   //Mostramos mensaje de tiempo restante     lcd.setCursor(4,1);   if (ahoras < 10) lcd.print("0");   // Si las horas son menor que 10, pone un "0" delante.   lcd.print(ahoras);   // Sin este codigo, se muestra asi: H:M:S  (1:M:S)   lcd.print(":");
   if (aminutos < 10) lcd.print("0");   // Si los minutos son menor que 10, pone un "0" delante.   lcd.print(aminutos);   // Sin este codigo, se muestra asi: H:M:S  (H:1:S)
   lcd.print(":");    if (asegundos < 10) lcd.print("0");  // si el valor de segundo esta por debajo de 9 (unidad) antepone un cero   lcd.print(asegundos);   // Sin este codigo, se muestra asi: H:M:S  (H:M:1)      if (segundostotal == 0)   //Si finaliza el tiempo   {      while(1)   //Bucle infinito mostrando mensaje y haciendo parpadear un led   {      lcd.clear();   lcd.setCursor(5,0);   lcd.print("Tiempo");   lcd.setCursor(3,1);   lcd.print("Finalizado");         sonarTono(TONO_ERROR,TIME_INTERVAL);   exit(0);   }      }   }   }
   //------------------------------------   // SONAR TONO   //------------------------------------   void sonarTono(int tono, int duracion)   {   tone(buzzer,tono,duracion);   delay(duracion);   }
Os dejo un video del funcionamiento:


Volver a la Portada de Logo Paperblog