Boa tarde Garagistas!!
Tenho um projeto com contagem progressiva e regressiva de 0 a 10 segundos e de 10 a 0 segundos mostrados no display
Tentei de várias formas,no programa não consigo pausar o tempo em crescente e nem em decrescente.
Se algum dos colegas puder me ajudar agradeço.
Segue programa.
#include
#include
#define botaoregres 2
#define ledregres 3
#define botaoprogres 8
#define ledprogres 5
#define botaopausa 9
// Inicializa o display no endereco 0x27
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int flagreprogres = 10; //seta o contador:Em 10 para e em 0 entra em andamento
int flagregres = 0; //seta o contador:Em 0 para e em 1 entra em andamento
int segundosprogres = 0; //tempo incial de progressão
int segundosregres = 10;//tempo incial de regressão
int entrada = 0; //monitora o estado da entrada se caso recebeu o pulso para ativar a saida
int pausa = 0; //pausa a contagem
int flag = 6; //seta no pino 6
int statusc = 0; //estatus do contador setado em 0
void setup() {
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Temporizador");
lcd.setCursor(0,1);
lcd.print("Na espera");
delay(2000); //tempo de apresentação no display
pinMode(botaoregres, INPUT); //entrada do botao para iniciar a regressão
pinMode(botaopausa,INPUT); //++++++++++
pinMode(botaoprogres,INPUT); //entrada do botao para iniciar a progressão
pinMode(ledprogres,OUTPUT );
pinMode(ledregres, OUTPUT);
pinMode(flag, OUTPUT);
}
void loop() {
entrada = digitalRead(botaoregres); //variavel que monitora a entrada do botao
if (entrada == HIGH ) { //entrada sendo igual a HIGH seta a flag em 1
flagregres = 1;//flag atribuido a 1
}
while(flagregres == 1){ //enquanto a flag for 1
digitalWrite(ledregres,LOW); // led desligado
segundosregres -- ; //decrementa a variavel segundos
lcd.clear(); //limpa o LCD
lcd.setCursor(0,0);
lcd.print("Tempo: - 10 Seg ");
lcd.setCursor(8,1);
lcd.print("00:"); //implementa dois zeros a frente
if(segundosregres<10){ // enquanto a variavel menor que 10
lcd.print("0"); // imprime um zero na frente
}
lcd.print(segundosregres); //printa a varialvel segundos
delay(1000); //mostra somente no LCD de 1 em 1 segundo
if(segundosregres == 0){ //segundos igual a zero
segundosregres = 0; //tempo inicial de regressão
flagregres = 0; //seta o contador em 0 novamente
digitalWrite(ledregres, HIGH);
lcd.clear();
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Temporiz/Decrescent");
lcd.setCursor(0,1);
lcd.print("Led acionado");
}else
digitalWrite(ledregres, LOW);
}
entrada = digitalRead(botaoprogres); //variavel que monitora a entrada do botao
if (entrada == HIGH ) { //entrada sendo igual a HIGH seta a flag em 1
flagreprogres = 1; //flag atribuido a 1
}
while( flagreprogres == 1){ //enquanto a flag for 1
digitalWrite(ledregres,LOW); // led desligado
segundosprogres ++ ; //incrementa a variavel segundos
lcd.clear(); //limpa o LCD
lcd.setCursor(0,0);
lcd.print("Tempo: + 10 Seg ");
lcd.setCursor(8,1);
lcd.print("00:"); //implementa dois zeros a frente
if(segundosprogres > 10){ // enquanto a variavel menor que 10
lcd.print("0"); // imprime um zero na frente
}
lcd.print(segundosprogres); //printa a varialvel segundos
delay(1000); //mostra somente no LCD de um em um segundo
if(segundosprogres == 10){ //segundos igual a 10
digitalWrite(ledprogres, HIGH);
delay(2000);
segundosprogres = 0; //tempo inicial de progressão
flagreprogres = 10; //seta o contador em 10 novamente
lcd.clear();
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Temporiz/Crescen");
lcd.setCursor(0,1);
lcd.print("Led acionado");
}else
digitalWrite(ledprogres, LOW);
}
}