Por favor, ajudem-me a encontrar um erro nesse código!
Fiz um código para SIMULAR um semáforo controlável com o LED RGB. A ideia é que, usando o botão, o "pedestre" altere a cor do semáforo para amarela e possa assim atravessar. Mas isso só é possível quando a luz verde estiver acesa. Há tempos específicos para o acendimento de cada luz.
Mas o resultado não foi o esperado, as luzes acesas foram diferentes e o botão não respondeu. Então, peço-lhes para que me ajudem a identificar possíveis erros no código.
#define red 12
#define green 11
#define blue 10
#define botao 7
double tempo=0;
int estado=0;
int b, bAnterior;
void setup() {
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(botao, INPUT);
}
void loop() {
//verificar se o botao foi apertado
b = digitalRead(botao);
if (b==HIGH && bAnterior==LOW && estado==1) {
estado=2;
digitalWrite(green, HIGH);
digitalWrite(red, HIGH);
digitalWrite(blue, LOW);
tempo=millis();
delay(50);
}
bAnterior = b;
//mudança de estado por passagem de tempo
if (estado==0 && (millis()-tempo)>15000 ) {
digitalWrite(green, HIGH);
digitalWrite(red, LOW);
digitalWrite(blue, LOW);
estado=(estado+1)%3;
tempo=millis();
}
if (estado==1 && (millis()-tempo)>10000 ) {
digitalWrite(green, HIGH);
digitalWrite(red, HIGH);
digitalWrite(blue, LOW);
estado=(estado+1)%3;
tempo=millis();
}
if (estado==2 && (millis()-tempo)>2000 ) {
digitalWrite(green, LOW);
digitalWrite(red, HIGH);
digitalWrite(blue, LOW);
estado=(estado+1)%3;
tempo=millis();
}
}