Hola que tal, estoy con un proyecto escolar, y necesito de un semáforo que funcione siempre y al presionar el botón, cambie a rojo y después vuelva a su secuencia normal, tengo el siguiente código, y el semáforo funciona perfectamente pero al presionar el botón no pasa nada, el botón esta conectado de un lado a la linea de entrada (pin 2) y a la corriente de 5v. y al otro lado al GND, si alguien puede ayudarme a saber como hacer que al presionar el botón, se cambie a rojo, me ayudaría mucho
Gracias.
int led_red = 13;
int led_yellow = 12;
int led_green = 11;
int estado;
void setup() {
pinMode(led_red, OUTPUT);
pinMode(led_yellow, OUTPUT);
pinMode(led_green, OUTPUT);
pinMode(2, INPUT);
}
void loop() {
estado = digitalRead(2);
if(estado == LOW){
Rojo();
}else{
Verde();
for (int i = 0; i < 5; i++){
BlinkVerde();
}
Amarillo();
for (int i = 0; i < 2; i++){
BlinkAmarillo();
}
Rojo();
}
}
void Verde(){
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, HIGH);
delay(500);
}
void BlinkVerde(){
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, LOW);
delay(500);
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, HIGH);
delay(1000);
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, LOW);
delay(500);
}
void Amarillo(){
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, HIGH);
digitalWrite(led_green, LOW);
delay(5000);
}
void BlinkAmarillo(){
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, LOW);
delay(500);
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, HIGH);
digitalWrite(led_green, LOW);
delay(1000);
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, LOW);
delay(500);
}
void Rojo(){
digitalWrite(led_red, HIGH);
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, LOW);
delay(500);
}
P.D.: No hagan mucho caso a los tiempos, son para hacer un poco mas rápido las pruebas