This was the schedule I made, but I have to keep setting the same time every time it finishes.
#include <LiquidCrystal.h>
#define TONO_ERROR 600
#define TIME_INTERVAL 1000
LiquidCrystal lcd(7,6,5,4,3,2); //LCD(RS, E, D4, D5, D6, D7)
int rele = 12;
int buzzer = 11; //Alarme
int ahoras = 0; //Variável para mostrar no LCD as horas
int aminutos = 0; //Variável para mostrar no LCD os minutos
int asegundos = 0; //Variável para mostrar no LCD os segundos
int segundostotal = 0; //Tempo total
int msg= 0; //Variável para mensagem de boa vinda
int start = A1; //Botão de start
int comeco = 1024; // Variável para armazenar botão start
int buth = A5; //Botão de Horas
int butm = A4; //Botão de Minutos
int buts = A3; //Botão de segundos
int varbuth = 0; //Variável para armazenar o valor do botão de horas
int varbutm = 0; //Variável para armazenar o valor do botão de minutos
int varbuts = 0; //Variável para armazenar o valor do botão de segundos
//------------------------------------
// SONAR TONO
//------------------------------------
void sonarTono(int tono, int duracion)
{
tone(buzzer,tono,duracion);
delay(duracion);
}
void setup()
{
lcd.begin(16, 2); // Iniciar LCD (colunas, linhas).
pinMode(buzzer, OUTPUT); //Pino de alarme --> Saida
pinMode(rele, OUTPUT); //Pino de relé --> Saida
pinMode(buth, INPUT); //Pino de botão de horas --> Entrada
pinMode(butm, INPUT); //Pino de botão de minutos --> Entrada
pinMode(buts, INPUT); //Pino de botão de segundos --> Entrada
pinMode(start, INPUT); //Pino de botão de start --> Entrada
msg = 0; //Mensagem de boas vindas
comeco = 1024; //variável start
varbuth = 1; //variável de horas
varbutm = 1; //variável de minutos
varbuts = 1; //variável de segundos
Serial.begin(9600);
}
void loop()
{
if(msg==0) //Mostramos a mensagem de boas vindas apenas 1 vez
{
lcd.setCursor(0,0);
lcd.print("Temporizador");
lcd.setCursor(1,1);
lcd.print("do Marquinho");
delay(2500);
msg = 1;
lcd.clear();
}
//-------------------------------------------------------------------------------------------------
// LENDO OS BOTÕES E ESCOLHENDO O TEMPO, NÃO DEIXA O LOOP ATÉ PRESSIONAR
// O BOTÃO DE PARTIDA
//-------------------------------------------------------------------------------------------------
do
{
varbuth = digitalRead(buth); //leitura do botão de horas
varbutm = digitalRead(butm); //leitura do botão de minutos
varbuts = digitalRead(buts); //leitura do botão de segundos
if(varbuth > 0) //Se o botão foi pressionado, aumentamos as horas em uma unidade
{
ahoras = ahoras + 1 ;
delay(250);
}
if(varbutm > 0) //Se o botão foi pressionado, aumentamos os minutos em uma unidade
{
aminutos = aminutos + 1;
if(aminutos == 60) aminutos = 0;
delay(250);
}
if(varbuts > 0) //Se o botão foi pressionado, aumentamos os segundos em uma unidade
{
asegundos = asegundos + 1;
if(asegundos == 60) asegundos = 0;
delay(250);
}
lcd.setCursor(0,0);
lcd.print("Ajuste o tempo"); //Mostrar mensagem e o HH: MM: SS que aumentamos
lcd.setCursor(4,1);
if (ahoras < 10) lcd.print("0"); // Se as horas forem menores que 10, coloque um "0" na frente
lcd.print(ahoras); // Sem este código, mostra assim: H: M: S (1: M: S)
lcd.print(":");
if (aminutos < 10) lcd.print("0"); // Se os minutos forem menores que 10, coloque um "0" na frente
lcd.print(aminutos); // Sem este código, parece com isto: H: M: S (H: 1: S)
lcd.print(":");
if (asegundos < 10) lcd.print("0"); // Se os segundos forem menores que 10, coloque um "0" na frente.
lcd.print(asegundos); // Sem este código, é assim: H: M: S (H: M: 1)
} while(digitalRead(start) == 0); // Repita o menu de escolher o tempo até pressionar o botão de partida.
segundostotal = asegundos + (aminutos * 60) + (ahoras * 60 * 60); //Converta o tempo escolhido em segundos !!
//-------------------------------------------------------------------------------------------------
// UMA VEZ PRESSIONADO O BOTÃO DE INICIAR E O TEMPO ACUMULADO, INSIRA O SEGUINTE WHILE
// E NÃO FINALIZA ATÉ VOCÊ TERMINAR A CONTA.
//-------------------------------------------------------------------------------------------------
while (segundostotal > 0)
{
delay (1000); //descontamos em períodos de 1 segundo
segundostotal--;
ahoras = ((segundostotal / 60)/ 60); //convertemos o total de segundos em horas
aminutos = (segundostotal / 60) % 60; //convertemos o total de segundos em minutos
asegundos = segundostotal % 60; //convertemos o total de segundos em períodos de 60 segundos
lcd.setCursor(0,0);
lcd.print("Tempo restante"); //mostra mensagem de tempo restante
lcd.setCursor(4,1);
if (ahoras < 10) lcd.print("0"); // Se as horas forem menores que 10, coloque um "0" na frente.
lcd.print(ahoras); // Sem este código, mostra assim: H: M: S (1: M: S)
lcd.print(":");
if (aminutos < 10) lcd.print("0"); // Se os segundos forem menores que 10, coloque um "0" na frente.
lcd.print(aminutos); // Sem este código, parece com isto: H: M: S (H: 1: S)
lcd.print(":");
if (asegundos < 10) lcd.print("0"); // se o segundo valor estiver abaixo de 9 (unidade), ele prefixará um zero
lcd.print(asegundos);
if (segundostotal == 0) //Se o tempo acabar
{
while(1) //Laço infinito mostrando mensagem e piscando um led
{
lcd.clear();
lcd.setCursor(5,0);
lcd.print("Tempo");
lcd.setCursor(3,1);
lcd.print("Finalizado");
sonarTono(TONO_ERROR,TIME_INTERVAL);
digitalWrite(rele, HIGH);
exit(0);
}
}
}
}