top of page
Foto del escritorcmarinv2005

Temporizador con Arduino + LCD + Eeprom

Actualizado: 30 oct 2021

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

}

}


3055 visualizaciones0 comentarios

Entradas recientes

Ver todo

Comments


Publicar: Blog2_Post
bottom of page