Temporizador en Arduino + LCD + Eeprom, comentado y explicado instrucción por instrucción, al final del video pueden ver el funcionamiento del Temporizador. Se utiliza una tarjeta de Arduino UNO, Un LCD DE 16X2, 4 pulsadores, 5 Resistencias de 330 y 1 led...
A partir del minuto 10:14 pueden ver el temporizador en funcionamiento. Aquí pueden descargar el código y modificarlo a su gusto: https://www.dropbox.com/s/vxxorxd7pt1ptfj/contador_UNO.ino?dl=0
Suscríbete a mi canal y de esta manera apoyas mi trabajo. http://www.youtube.com/subscription_center?add_user=cmarinv2005
Diagrama de conexión del temporizador
//Temporizador Arduino + LCD
#include <EEPROM.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Libreria del display LCD en caso que sea I2C
LiquidCrystal_I2C lcd(0X27,16,2); // Direccion display LCD en caso que sea I2C
//#include <LiquidCrystal.h> // Libreria del display LCD
//LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Inicializamos la libreria con todos los pines a utilizar
int relevo=10; //Carga
int msg=0; //Bandera para el mensaje de bienvenida
int star=9; //Pulsador de Arranque
int buth=8; //Pulsador de incremento horas
int butm=7; //Pulsador de incremento minutos
int buts=6; //Pulsador de incremento segundos
int varbuth=0; //Variable para almacenar el valor del pulsador incremento de horas
int varbutm=0; //Variable para almacenar el valor del pulsador incremento de minutos
int varbuts=0; //Variable para almacenar el valor del pulsador incremento de segundos
int varstar=0; //Variable para almacenar el valor del pulsador de start
int ahoras=0;
int aminutos=0;
int asegundos=0;
int segundostotal = 0; //Tiempo total
int temp_horas = 0;
int temp_minutos = 0;
int temp_segundos = 0;
int dirh=0; //Variable para almacenar la direccion de horas de la memoria EEPROM
int dirm=1; //Variable para almacenar la direccion de minutos de la memoria EEPROM
int dirs=2; //Variable para almacenar la direccion de segundos de la memoria EEPROM
int dirflag=3; //Variable para usar como bandera para saber si debo leer datos de EEPROM
int valida=0;
int segundos = 0;
unsigned long milisegundos = 0;
unsigned long tiempo1 = 0;
unsigned long tiempoSegundos = 0;
int fin=0;
void setup() {
// Inicializamos el LCD
lcd.init();
lcd.begin(16, 2); //Configuramos el número de columnas y filas del lcd
lcd.backlight(); //Encender la luz de fondo.
pinMode(relevo, OUTPUT);
pinMode(buth, INPUT);
pinMode(butm, INPUT);
pinMode(buts, INPUT);
pinMode(star, INPUT);
msg=0;
/*
varbuth=1;
varbutm=1;
varbuts=1;
varstar=1;
*/
valida = EEPROM.read(dirflag); //Obtiene dato de dirflag para comprobar si debo leer EEPROM
if(valida==1){
ahoras = EEPROM.read(dirh); // Obtiene el dato int de EEPROM y lo envía a la variable ahoras
aminutos = EEPROM.read(dirm); // Obtiene el dato int de EEPROM y lo envía a la variable aminutos
asegundos = EEPROM.read(dirs); // Obtiene el dato int de EEPROM y lo envía a la variable asegundos
}
lcd.setCursor(0,0); //Ubicamos el cursor en posicion 0 LCD primera linea
lcd.print("Temporizador por");
lcd.setCursor(0,1); //Ubicamos el cursor en LCD en posicion 0 segunda linea
lcd.print("Carlos A. Marin");
}
void loop() {
if(msg==0){ //Si esta condición se cumple mostraremnos el mensje de bienvenida solo una vez
lcd.setCursor(0,0); //Ubicamos el cursor en LCD
lcd.print("Temporizador por"); //Mensaje que se muestra a partir de la posición anterior del cursor
lcd.setCursor(0,1); //Volvemos a ubicar el cursor, ahora en la linea de abajo
lcd.print("Carlos A. Marin "); //Mensaje que se muestra a partir de la posición anterior del cursor
delay(3000); //tiempo que aparece el mensaje en pantalla
msg=1; //Cambiamos el valor de msg, para que no vuelva a mostrar el mensaje, a menos que lo apaguemos o reiniciemos
lcd.clear(); //Borramos la pantalla
}
//Ahora, pasaremos a leer los datos que mandan los pulsadores, que seran los que programen el tiempo
//Esto lo haremos con la orden "do", para que entre en bucle y este leyendo continuamente, hasta que
//terminemos de ajustar el tiempo y le demos al boton de arranque
do {
varbuth=digitalRead(buth);
varbutm=digitalRead(butm);
varbuts=digitalRead(buts);
varstar=digitalRead(star);
if(varbuth==HIGH){
ahoras++;
if(ahoras>=100){
ahoras=0;
}
delay(250);
}
if(varbutm==HIGH){
aminutos++;
if(aminutos>=60){
ahoras++;
aminutos=0;
if(ahoras>=100){
ahoras=0;
}
}
delay(250);
}
if(varbuts==HIGH){
asegundos++;
if(asegundos>=60){
aminutos++;
asegundos=0;
if(aminutos>=60){
aminutos=0;
ahoras++;
if(ahoras>=100){
ahoras=0;
}
}
}
delay(250);
}
lcd.setCursor(0,0);
lcd.print("Ajuste el Tiempo ");
lcd.setCursor(4,1);
if(ahoras<10){ //Esto es para poner un 0 delante si las horas son menor de 10
lcd.print("0");
}
lcd.print(ahoras);
lcd.print(":");
if(aminutos<10){ //Esto es para poner un 0 delante si los minutos son menor de 10
lcd.print("0");
}
lcd.print(aminutos);
lcd.print(":");
if(asegundos<10){ //Esto es para poner un 0 delante si los segundos son menor de 10
lcd.print("0");
}
lcd.print(asegundos);
}while(varstar==LOW);
if(varstar==HIGH){
temp_horas = ahoras; //Guardo la configuracion de horas en una variable temporal
temp_minutos = aminutos; //Guardo la configuracion de minutos en una variable temporal
temp_segundos= asegundos; //Guardo la configuracion de segundos en una variable temporal
valida = 1;
EEPROM.update(dirflag, valida); // Se escribe la direccion 3 de la EEPROM con el valor 1 si el valor es diferente de 1
EEPROM.write(dirh, ahoras); // Se agrega a EEPROM con la dirección primero y valor de la variable después
EEPROM.write(dirm, aminutos);
EEPROM.write(dirs, asegundos);
lcd.setCursor(0,0);
lcd.print(" "); // Limpio la primer fila del LCD con 16 espacios en blanco
do {
//contador de segundos
//..........................................................................................................................
digitalWrite(relevo, HIGH); //Activamos la carga mientras dure el contador
milisegundos = millis();
if(milisegundos > (tiempo1+1000)){ //Si ha pasado 1 segundo ejecuta el IF
tiempo1 = millis(); //Actualiza el tiempo actual
segundos++;
tiempoSegundos = tiempo1/1000; //Tiempo transcurrido desde que esta encendido el Arduino
}
if (segundos==1){
lcd.setCursor(0,0);
lcd.print("Tiempo Restante");
segundos=0;
if(asegundos>0){
asegundos--;
lcd.setCursor(10,1);
if(asegundos<10){ //Esto es para poner un 0 delante si los segundos son menor de 10
lcd.print("0");
}
lcd.print(asegundos);
}
if(asegundos==0){
if(aminutos>0){
aminutos--;
asegundos=60;
lcd.setCursor(7,1);
if(aminutos<10){ //Esto es para poner un 0 delante si los minutos son menor de 10
lcd.print("0");
}
lcd.print(aminutos);
}
}
if(asegundos==0){
if(aminutos==0){
if(ahoras>0){
ahoras--;
aminutos=60;
lcd.setCursor(4,1);
if(ahoras<10){ //Esto es para poner un 0 delante si las horas son menor de 10
lcd.print("0");
}
lcd.print(ahoras);
}
}
}
}
if(ahoras==0){
if(aminutos==0){
if(asegundos==0){
digitalWrite(relevo, LOW);
fin=1;
}
}
}
}while(fin==0);
fin=0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("T. Finalizado");
delay(2000);
ahoras = temp_horas; // recupero tiempo programado de la variable temporal horas
aminutos = temp_minutos; // recupero tiempo programado de la variable temporal minutos
asegundos = temp_segundos; // recupero tiempo programado de la variable temporal segundos
}
}
Comments