Estoy programando un contador con LCD y Arduino NANO, estoy teniendo muchos problemas con los condicionales.
Basicamente las funciones que tiene son seleccionar tiempo con 2 botones, boton de inicio, boton de reset, boton de inicio infinito (hasta que pulsemos reset) A todo esto le quiero agregar una pausa que se determina por un sensor de puerta, cuando esta esté abierta el contador se debe pausar.
No logro hacer que funcione la pausa, ya que no puedo romper el bucle del while. Ni tampoco hacer que funcione el boton de inicio infinito. Si alguien le puede dar un vistazo al codigo para darme una mano se lo agradeceria!
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
int buzzer = 13; //Alarma
int ahoras = 0; //Variable a mostrar por LCD de las horas
int aminutos = 0; //Variable a mostrar por LCD de los minutos
int asegundos = 0; //Variable a mostrar por LCD de los segundos
int segundostotal = 0; //Tiempo total
int msg= 0; //Barrera para el mensaje de bienvenida
int pausa = A3; //Sensor NC
int relay = 10; //Relay esterilizador
int start = A2; //Pulsador de arranque
int empieza = 1024; //Variable para almacenaje del pulsador de arranque
int buth = A5; //Pulsador de 30 minutos
int butm = A4; //Pulsador de 15 minutos
int butr = A6; //Pulsador de reset
int buti = A7; //Pulsador de comienzo infinito
int varbuth = 0; //Variable para almacenar el valor del pulsador de horas
int varbutm = 0; //Variable para almacenar el valor del pulsador de minutos
int varbuti = 0;
int varbutr = 0;
int varpausa = 0;
void setup()
{
lcd.begin(16, 2);
pinMode(relay, OUTPUT); //Pin de relay --> Salida
pinMode(buth, INPUT); //Pin de pulsador de horas --> Entrada
pinMode(butm, INPUT); //Pin de pulsador de minutos --> Entrada
pinMode(buti, INPUT); //Pin de pulsador de arranque inf --> Entrada
pinMode(start, INPUT); //Pin de pulsador de arranque --> Entrada
pinMode(butr, INPUT);
pinMode(pausa, INPUT);
msg = 0; //Barrera del mensaje de bienvenida
empieza = 1024; //Barrera de arranque
varbuth = 1; //Barrera de horas
varbutm = 1; //Barrera de minutos
varbuti = 1;
varbutr = 1;
varpausa = 1;
}
void loop()
{
if(msg==0)
{
lcd.setCursor(0,0);
lcd.print("Temporizador con");
lcd.setCursor(1,1);
lcd.print("Arduino + LCD");
delay(2500);
msg = 1;
lcd.clear();
}
if (varbuti == 0)
{
lcd.clear();
lcd.setCursor(3,0);
lcd.print("ENCENDIDO");
lcd.setCursor(2,1);
lcd.print("FUNCIONANDO");
digitalWrite(relay, LOW);
delay(1);
}
do
{
varbuth = analogRead(buth); //Lee boton de horas
varbutm = analogRead(butm); //Lee boton de minutos
varbuti = analogRead(buti);
varbutr = analogRead(butr);
if(varbuth == 0)
{
aminutos = aminutos + 30 ;
delay(250);
}
if(varbutm == 0)
{
aminutos = aminutos + 15;
delay(250);
}
lcd.setCursor(0,0);
lcd.print("Elige el tiempo");
lcd.setCursor(4,1);
if (ahoras < 10) lcd.print("0");
lcd.print(ahoras);
lcd.print(":");
if (aminutos < 10) lcd.print("0");
lcd.print(aminutos);
lcd.print(":");
if (asegundos < 10) lcd.print("0");
lcd.print(asegundos);
empieza = analogRead(start); //Lee el boton de arranque
if (empieza == 0) //Si el boton de arranque, fue pulsado...
{
segundostotal = asegundos + (aminutos * 60) + (ahoras * 60 * 60); //Convierte el tiempo elegido en segundos
}
if (varbutr == 0);
{
digitalWrite(relay, HIGH);
delay(1);
msg = 0;
}
} while(empieza != 0); // Se repite el menu de elegir tiempo hasta que pulsemos el boton de arranque.
while (segundostotal > 0)
{
digitalWrite(relay, LOW);
delay (1000); //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");
lcd.print(ahoras);
lcd.print(":");
if (aminutos < 10) lcd.print("0");
lcd.print(aminutos);
lcd.print(":");
if (asegundos < 10) lcd.print("0");
lcd.print(asegundos);
if (varbutr == 0);
{
digitalWrite(relay, HIGH);
delay(1);
msg = 0;
}
if (segundostotal == 0) //Si finaliza el tiempo
msg = 1;
{
while(msg == 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");
digitalWrite(relay, HIGH);
delay(5000);
if (butr == 0);
{
msg = 0;
}
}
}
}
}