byte porta_botao3 = 3;
byte porta_botao4 = 4; // ou sensor 1S
byte porta_rele = 13;
byte porta_verde = 5;
byte porta_amarelo = 6;
byte porta_vermelho = 7;
bool estadoBotao4Anterior = 1;
int contador = 0;
long int tempomarcado = 0; //esta variavel marca o tempo em que o evento a ser observado ocorre, nesse caso, o ultimo momento em que o botao nao estava apertado
long int tempodecorrido = 0; // esta variavel representa a diferenca entre o tempo atual e o "tempomarcado"
void setup() {
pinMode(porta_botao3, INPUT_PULLUP);
pinMode(porta_botao4, INPUT_PULLUP);
pinMode(porta_rele, OUTPUT);
pinMode(porta_verde, OUTPUT);
pinMode(porta_amarelo, OUTPUT);
pinMode(porta_vermelho, OUTPUT);
Serial.begin(9600); // inicializa a serial
}
void loop() {
// Botão 3: liga o relé enquanto pressionado
if (digitalRead(porta_botao3) == 0) {
digitalWrite(porta_rele, HIGH);
}
// Leitura atual do botão 4
bool estadoBotao4Atual = digitalRead(porta_botao4);
// Detecta a transição (borda de descida)
if ((estadoBotao4Atual == 0) && (estadoBotao4Atual != estadoBotao4Anterior)) {
//digitalWrite(porta_rele, LOW); // desliga o relé
contador++; // incrementa o contador uma vez por clique
Serial.print("Contador incrementado: ");
Serial.println(contador);
}
// Atualiza o estado anterior do botão 2
estadoBotao4Anterior = estadoBotao4Atual;
if (estadoBotao4Atual == 0) {
tempodecorrido = millis() - tempomarcado;
}
else
{
tempomarcado = millis();
tempodecorrido = 0;
}
if (tempodecorrido >= 3000) {
digitalWrite(porta_rele, LOW); // desliga o relé
}
if (tempodecorrido >= 500) {
digitalWrite(porta_verde, 1);
}
else {
digitalWrite(porta_verde, 0);
}
if (tempodecorrido >= 1500) {
digitalWrite(porta_amarelo, 1);
}
else {
digitalWrite(porta_amarelo, 0);
}
if (tempodecorrido >= 2500) {
digitalWrite(porta_vermelho, 1);
}
else {
digitalWrite(porta_vermelho, 0);
}
delay(50); // debounce
}