Hola,soy novato en programacio y estoy haciendo un reloj con el modulo DS3231, el cual me funciona bien, entonces quiero colocar 2 temporizadores lo hice de la siguiente manera cree un registro y guardo la hora para compararla con el reloj a traves de unos pulsadores; modo1, modo2, horas y minutos. Cuando pulso modo1 deveria desplegar la pantalla para colocar la hora de encendido1 o alarma on1 al soltar y presionar nuevamente deveria desplegar la opcion de programar la hora de encendido2 o alarma on2, cuando presiono el pulsador de modo2 deveria desplegar la pantalla para programar la hora de apagado1 o alarma off1 y al oprimir el pulsador nuevamente deberia desplegar la pantalla para programar la hora de apagado2 o alarma off2, los pulsadores hora y minutos son para incrementar las horas y los minutos dentro de cada registro a comparar. Para determinar si prender o apagar una salida en el arduino, pero en el momento de programar la hora del temporizador no puedo hacer que el lcd muestre la pantalla para programar la hora de la alarma de prendido o apagado ya que dura un pequeño instante y luego retorna al reloj.
¿como puedo hacer que al pulsar modo1 el lcd pase a la pantalla para programar la hora respectiva de encendido o apagado y permanesca en ese menu hasta que el pulsador sea pulsado nuevamente pase a la siguiente alarma y por ultimo retorne y muestre la hora del reloj?
¿podria implementarlo mejor?
#include "Arduino.h"
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <DS3231.h>
//Librería GitHub - jarzebski/Arduino-DS3231: DS3231 Real-Time-Clock
void printDetail(uint8_t type, int value);
//LCD**
LiquidCrystal_I2C lcd(0x27,16,2);
DS3231 clock;
RTCDateTime dt;
//############### BOTONERA ###############
int btnModoA = 1;
int btnModoB = 2;
int btnHoras = 3;
int btnMinutos = 4;
int HorasOn1;
int HorasOff1;
int MinutosOn1;
int MinutosOff1;
int HorasOn2;
int HorasOff2;
int MinutosOn2;
int MinutosOff2;
int HorasOn3;
int HorasOff3;
int MinutosOn3;
int MinutosOff3;
int HorasOn4;
int HorasOff4;
int MinutosOn4;
int MinutosOff4;
int btnModoA1;
int btnModoB1;
int ModoA;
int ModoB;
//#################### SALIDAS ################
int Led_1 = 9;
int Led_2 = 10;
int Led_3 = 11;
int Led_4 = 12;
//**************************************************************************
void setup()
{
Wire.begin();
clock.begin();
lcd.begin(16,2);
lcd.backlight();
clock.setDateTime(DATE, TIME); // aqui se programa la hora y fecha que tiene el pc
pinMode(btnModoA,INPUT_PULLUP);
pinMode(btnModoB,INPUT_PULLUP);
pinMode(btnHoras,INPUT_PULLUP);
pinMode(btnMinutos,INPUT_PULLUP);
pinMode(Led_1, OUTPUT);
pinMode(Led_2, OUTPUT);
pinMode(Led_3, OUTPUT);
pinMode(Led_4, OUTPUT);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void loop()
{
dt = clock.getDateTime();
// *****************Imprimir en el LCD ********************
lcd.clear();
lcd.setCursor(0,0);
switch(dt.dayOfWeek)
{
case 1: lcd.print(" Lunes"); break;
case 2: lcd.print(" Martes"); break;
case 3: lcd.print(" Miercoles"); break;
case 4: lcd.print(" Jueves"); break;
case 5: lcd.print(" Viernes"); break;
case 6: lcd.print(" Sabado"); break;
case 7: lcd.print(" Domingo");
}
//************************ LCD PRINT *************************+
lcd.print("/");
lcd.print(dt.day);
lcd.print("/ ");
int temperatura = clock.readTemperature();
lcd.print(temperatura);
lcd.print((char)223);
lcd.print("C");
//***************************************************
lcd.setCursor(0,1);
lcd.print(" ");
lcd.print(dt.hour);
lcd.print(":");
if(dt.minute < 10) lcd.print("0");
lcd.print(dt.minute);
lcd.print(":");
if(dt.second < 10) lcd.print("0");
lcd.print(dt.second);
lcd.print("/");
lcd.print(dt.month);
lcd.print("/");
lcd.print(dt.year);
delay(500);
//******************* leer boton A ****************
//**************************************************
if(digitalRead(btnModoA) == HIGH)
{
ModoA = digitalRead(btnModoA);
ModoA = ModoA + 1;
switch(ModoA)
{
case 1:AlarmaOn_1();
break;
case 2:AlarmaOn_2();
break;
case 3:AlarmaOn_3();
break;
case 4:AlarmaOn_4();
break;
}
}
while(digitalRead(btnModoB)== HIGH)
{
ModoB = digitalRead(btnModoB);
ModoB = ModoB +1;
if(ModoB == 1)
{
AlarmaOff_1();
}
if(ModoB == 2)
{
AlarmaOff_2();
}
if(ModoB == 3)
{
AlarmaOff_3();
}
if(ModoB == 4)
{
AlarmaOff_4();
ModoB = 0;
}
}
}
//************************************************************
//****************************** PRENDER *********************
//############################### ALARMA_1 ##########################
void AlarmaOn_1()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ALARMA 1 ON SET ");
lcd.setCursor(4,1);
lcd.print(HorasOn1);
lcd.setCursor(6,1);
lcd.print(" : ");
lcd.setCursor(9,1);
lcd.print(MinutosOn1);
delay(500);
//**************************** horas set*************************
if (digitalRead(btnHoras))
{
HorasOn1 = HorasOn1 + 1;
}
if(HorasOn1 == 24)
{
HorasOn1 = 00;
delay(100);
}
//******************************* minuto set *************************
if (digitalRead(btnMinutos))
{
MinutosOn1 = MinutosOn1 + 1;
}
if(MinutosOn1 == 60)
{
MinutosOn1 = 00;
delay(100);
}
//**************************************************************
if ((dt.hour == HorasOn1) && (dt.minute == MinutosOn1))
{
digitalWrite(Led_1,HIGH);
}
}
//************************ APAGAR ******************
void AlarmaOff_1()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ALARMA 1 OFF SET ");
lcd.setCursor(4,1);
lcd.print(HorasOff1);
lcd.setCursor(6,1);
lcd.print(" : ");
lcd.setCursor(9,1);
lcd.print(MinutosOff1);
delay(500);
//*************************** horas off set ******************
if (digitalRead(btnHoras))
{
HorasOff1 = HorasOff1 + 1;
}
if(HorasOff1 == 24)
{
HorasOff1 = 00;
delay(100);
}
//******************************* minutos off set *************************
if (digitalRead(btnMinutos))
{
MinutosOff1 = MinutosOff1 + 1;
}
if(MinutosOff1 == 60)
{
MinutosOff1 = 00;
delay(100);
}
if ((dt.hour == HorasOff1) && (dt.minute == MinutosOff1))
{
digitalWrite(Led_1,LOW);
}
}
//#################################### ALARMA_2 #########################
void AlarmaOn_2()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ALARMA 2 ON SET ");
lcd.setCursor(4,1);
lcd.print(HorasOn2);
lcd.setCursor(6,1);
lcd.print(" : ");
lcd.setCursor(9,1);
lcd.print(MinutosOn2);
delay(500);
//**************************** horas set*************************
if (digitalRead(btnHoras))
{
HorasOn2 = HorasOn2 + 1;
}
if(HorasOn2 == 24)
{
HorasOn2 = 00;
delay(100);
}
//******************************* minuto set *************************
if (digitalRead(btnMinutos))
{
MinutosOn2 = MinutosOn2 + 1;
}
if(MinutosOn2 == 60)
{
MinutosOn2 = 00;
delay(100);
}
//**************************************************************
if ((dt.hour == HorasOn2) && (dt.minute == MinutosOn2))
{
digitalWrite(Led_2,HIGH);
}
}
//************************ APAGAR ******************
void AlarmaOff_2()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ALARMA 2 OFF SET ");
lcd.setCursor(4,1);
lcd.print(HorasOff2);
lcd.setCursor(6,1);
lcd.print(" : ");
lcd.setCursor(9,1);
lcd.print(MinutosOff2);
delay(500);
//*************************** horas off set ******************
if (digitalRead(btnHoras))
{
HorasOff2 = HorasOff2 + 1;
}
if(HorasOff2 == 24)
{
HorasOff2 = 00;
delay(100);
}
//******************************* minutos off set *************************
if (digitalRead(btnMinutos))
{
MinutosOff2 = MinutosOff2 + 1;
}
if(MinutosOff2 == 60)
{
MinutosOff2 = 00;
delay(100);
}
if ((dt.hour == HorasOff2) && (dt.minute == MinutosOff2))
{
digitalWrite(Led_2,LOW);
}
}
//################################## ALARMA_3 ###############################################
void AlarmaOn_3()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ALARMA 3 ON SET ");
lcd.setCursor(4,1);
lcd.print(HorasOn3);
lcd.setCursor(6,1);
lcd.print(" : ");
lcd.setCursor(9,1);
lcd.print(MinutosOn3);
delay(500);
//**************************** horas set*************************
if (digitalRead(btnHoras))
{
HorasOn3 = HorasOn3 + 1;
}
if(HorasOn3 == 24)
{
HorasOn3 = 00;
delay(100);
}
//******************************* minuto set *************************
if (digitalRead(btnMinutos))
{
MinutosOn3 = MinutosOn3 + 1;
}
if(MinutosOn3 == 60)
{
MinutosOn3 = 00;
delay(100);
}
//**************************************************************
if ((dt.hour == HorasOn3) && (dt.minute == MinutosOn3))
{
digitalWrite(Led_3,HIGH);
}
}
//************************ APAGAR ******************
void AlarmaOff_3()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ALARMA 3 OFF SET ");
lcd.setCursor(4,1);
lcd.print(HorasOff3);
lcd.setCursor(6,1);
lcd.print(" : ");
lcd.setCursor(9,1);
lcd.print(MinutosOff3);
delay(500);
//*************************** horas off set ******************
if (digitalRead(btnHoras))
{
HorasOff3 = HorasOff3 + 1;
}
if(HorasOff3 == 24)
{
HorasOff3 = 00;
delay(100);
}
//******************************* minutos off set *************************
if (digitalRead(btnMinutos))
{
MinutosOff3 = MinutosOff3 + 1;
}
if(MinutosOff3 == 60)
{
MinutosOff3 = 00;
delay(100);
}
if ((dt.hour == HorasOff3) && (dt.minute == MinutosOff3))
{
digitalWrite(Led_3,LOW);
}
}
//################################## ALARMA_4 ###################
void AlarmaOn_4()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ALARMA 4 ON SET ");
lcd.setCursor(4,1);
lcd.print(HorasOn4);
lcd.setCursor(6,1);
lcd.print(" : ");
lcd.setCursor(9,1);
lcd.print(MinutosOn4);
delay(500);
//**************************** horas set*************************
if (digitalRead(btnHoras))
{
HorasOn4 = HorasOn4 + 1;
}
if(HorasOn4 == 24)
{
HorasOn4 = 00;
delay(100);
}
//******************************* minuto set *************************
if (digitalRead(btnMinutos))
{
MinutosOn4 = MinutosOn4 + 1;
}
if(MinutosOn4 == 60)
{
MinutosOn4 = 00;
delay(100);
}
//**************************************************************
if ((dt.hour == HorasOn4) && (dt.minute == MinutosOn4))
{
digitalWrite(Led_4,HIGH);
}
}
//************************ APAGAR ******************
void AlarmaOff_4()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ALARMA 4 OFF SET ");
lcd.setCursor(4,1);
lcd.print(HorasOff4);
lcd.setCursor(6,1);
lcd.print(" : ");
lcd.setCursor(9,1);
lcd.print(MinutosOff4);
delay(500);
//*************************** horas off set ******************
if (digitalRead(btnHoras))
{
HorasOff4 = HorasOff4 + 1;
}
if(HorasOff4 == 24)
{
HorasOff4 = 00;
delay(100);
}
//******************************* minutos off set *************************
if (digitalRead(btnMinutos))
{
MinutosOff4 = MinutosOff4 + 1;
}
if(MinutosOff4 == 60)
{
MinutosOff4 = 00;
delay(100);
}
if ((dt.hour == HorasOff4) && (dt.minute == MinutosOff4))
{
digitalWrite(Led_4,LOW);
}
}