Estou usando a biblioteca timing.h para o temporizador.
Nela ja declaro a atualização dos segundos a cada 1000 milisegundos.
Porém preciso que esse temporizador exiba o tempo decorrido em um display lcd a partir de algumas condições que o usuário ira escolher pelo teclado matricial, e estas condições estão em um laço while junto com o temporizador para serem exibidas até que o usuário deseje passar para outra função.
Acontece que como a taxa de atualização do display é muito alta, preciso usar um delay dentro do laço while para que as informações que o LCD imprime sejam visíveis.
Ai está o problema:
Quando uso um delay (1000); o temporizador atua corretamente, porém os botões para entrar nas condições não, várias tentativas até o botão pressionado entrar na condição determinada à ele.
Quando uso qualquer delay menor, o temporizador acelera a contagem dos segundos.
Um delay(200) por exemplo, os botoes respondem imediatamente, porem um de (500) demora responder, e ambos bugam o temporizador.
Alguem sabe outra forma de controlar a atualização do display?
Segue trecho do código.
while(contB == 0){ // CONTROLE DA RESISTENCIA EM FUNCAO DA TEMERATURA
int temperatura = sensor.getTemp();
char key = keypad.getKey();
if(temperatura < 25){ //TEMPERATURA MINIMA PARA A QUAL A RESISTENCIA FICA LIGADA
digitalWrite(RES, HIGH); // ATIVA RESISTENCIA SE TEMPERATURA ESTIVER ENTRE 62 E 65
//digitalWrite(BUZ, HIGH);
digitalWrite(VAL, HIGH); // ATIVA VALVULA
digitalWrite(MOT, HIGH); // ATIVA MOTOR
lcd.clear();
lcd.setCursor(0,0);
lcd.print("RES: ON | LTLT: ON");
lcd.setCursor(0,1);
lcd.print(temperatura);
lcd.print(" C");
lcd.setCursor(5,1);
lcd.print("TEMPO 00:00");
lcd.setCursor(0,3); lcd.print("SEGURE D: OPCOES");
}
else if(temperatura >= 25) { // TEMPERATURA MAXIMA
digitalWrite(RES, LOW); // ATIVA RESISTENCIA SE TEMPERATURA ESTIVER ENTRE 62 E 65
//digitalWrite(BUZ, HIGH);
digitalWrite(VAL, HIGH); // ATIVA VALVULA
digitalWrite(MOT, HIGH); // ATIVA MOTOR
lcd.clear();
lcd.setCursor(0,0);
lcd.print("RES: OFF | LTLT: ON"); // DESATIVA A RESISTENCIA SE A CONDIÇÃO NAO FOR SATISFEITA
lcd.setCursor(0,1);
lcd.print(temperatura);
lcd.print(" C");
lcd.setCursor(5,1);
lcd.print("TEMPO 00:00");
lcd.setCursor(0,3); lcd.print("SEGURE D: OPCOES");
ativaTimer=1;
}
if(ativaTimer == 1 ){
if (timerEnvio.onTimeout(1000)){segundos++;}
if (segundos == 60){minutos++; segundos=0;
if( minutos < 10){ lcd.setCursor (12,1); lcd.print(" ");}
else if (minutos >= 10){lcd.setCursor (11,1); lcd.print(" "); }} //LIMPA DISPLAY PARA ATUALIZAR OS MINUTOS
if(minutos < 10){
lcd.setCursor(12,1); lcd.print(minutos);
lcd.setCursor(13,1); lcd.print(":");
if(segundos <10){
lcd.setCursor(14,1); lcd.print("0");
lcd.setCursor(15,1); lcd.print(segundos);
}
else if (segundos >= 10) {lcd.setCursor(14,1); lcd.print(segundos);}
}
if (minutos >= 10){
lcd.setCursor(11,1); lcd.print(minutos);
lcd.setCursor(13,1); lcd.print(":");
if(segundos <10){
lcd.setCursor(14,1); lcd.print("0");
lcd.setCursor(15,1); lcd.print(segundos);
}
else if (segundos >=10) {lcd.setCursor(14,1); lcd.print(segundos);}
}
}
if (minutos == 30 ){
digitalWrite(RES, LOW);
digitalWrite(VAL, LOW); // VERIFICAR TEMPO DA VALVULA LIGADA P RESFRIAR ATE 40 GRAUS
digitalWrite(MOT, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PROCESSO CONCLUIDO");
lcd.setCursor(0,3);
lcd.print("D: MENU INICIAL");
ativaTimer=0; //minutos=0; segundos=0;
contB = 1;
}
//if(contBreak == 1 || key == '2'){
if(key == 'D'){
lcd.clear();
lcd.setCursor(0,0); lcd.print("1: CONTINUAR");
lcd.setCursor(0,1); lcd.print("2: PARAR");
break;}
delay(500);
} // FIM WHILE CONT B