How do I make the timer remember the time that was placed on it, without having to enter the same time every time

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);
             
         }     
      }
 }

}

Read the forum guidelines to see how to properly post code.

Use the IDE autoformat tool (ctrl-t or Tools, Auto format) before posting code in code tags.

when a timer expires, why not just reset it to the equivalent of 24 hours?

an explanation of the posted code would help

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.