Hola, estoy intentando entender las funciones básicas de programación en Arduino ya que soy nuevo en esto. Me encuentro haciendo un código que cuente los pulsos de un botón pulsador, enseguida les explico mi problema y les anexo mi código (espero me de a entender).
Mi programa intenta simular una secuencia tipo "semáforo" controlada por un botón pulsador, es decir, pulso el botón una vez y la secuencia empieza a correr, pulso el botón por segunda vez y la secuencia se detiene.
Al momento de pulsar el botón por primera vez le digo a mi programa que mande un valor "1" a "int contador" para que se ejecute una secuencia tipo "semáforo" siempre y cuando siga habiendo un valor "1" en "int contador" (hasta aquí el código funciona).
Mi problema es que al yo presionar el botón pulsador por segunda vez, no pasa nada, la secuencia del "semáforo" se sigue ejecutando infinitamente, amenos que deje sostenido el botón pulsador hasta que termine la secuencia, entonces ahí se ejecuta el ultimo "if" y el "int contador" vuelve a "0" apagando la secuencia tipo "semáforo", y dejando al programa en espera de que se vuelva a presionar el boton para ejecutar nuevamente la secuencia.
int contador = 0;
int verde = 3;
int amarillo = 4;
int rojo = 5;
int estadoAnterior = 0;
int boton = 2;
void setup() {
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(2, INPUT);
}
void loop() {
int lectura = digitalRead(boton);
if (lectura != estadoAnterior){
if (lectura == HIGH){
contador++;
}
}
estadoAnterior = lectura;
if (contador == 1){
digitalWrite(verde, HIGH);
delay(2700);
digitalWrite(verde, LOW);
delay (100);
digitalWrite(verde, HIGH);
delay (100);
digitalWrite(verde, LOW);
delay (100);
digitalWrite(verde, HIGH);
delay (100);
digitalWrite(verde, LOW);
delay (100);
digitalWrite(verde, HIGH);
delay (100);
digitalWrite(verde, LOW);
delay (100);
digitalWrite(verde, HIGH);
delay (100);
digitalWrite(verde, LOW);
digitalWrite(amarillo, HIGH);
delay (2700);
digitalWrite(amarillo, LOW);
delay (100);
digitalWrite(amarillo, HIGH);
delay (100);
digitalWrite(amarillo, LOW);
delay (100);
digitalWrite(amarillo, HIGH);
delay (100);
digitalWrite(amarillo, LOW);
delay (100);
digitalWrite(amarillo, HIGH);
delay (100);
digitalWrite(amarillo, LOW);
delay (100);
digitalWrite(amarillo, HIGH);
delay (100);
digitalWrite(amarillo, LOW);
delay (100);
digitalWrite(amarillo, HIGH);
delay (100);
digitalWrite(amarillo, LOW);
digitalWrite(rojo, HIGH);
delay (2700);
digitalWrite(rojo, LOW);
delay (100);
digitalWrite(rojo, HIGH);
delay (100);
digitalWrite(rojo, LOW);
delay (100);
digitalWrite(rojo, HIGH);
delay (100);
digitalWrite(rojo, LOW);
delay (100);
digitalWrite(rojo, HIGH);
delay (100);
digitalWrite(rojo, LOW);
delay (100);
digitalWrite(rojo, HIGH);
delay (100);
digitalWrite(rojo, LOW);
}
if (contador == 2){
digitalWrite(verde, LOW);
digitalWrite(amarillo, LOW);
digitalWrite(rojo, LOW);
contador=0;
}
}
Pienso que puede ser por dos razones:
1.- La memoria del contador no esta reteniendo el segundo pulso.
2.- La velocidad/forma en que el Arduino lee las lineas de código es muy rápida y no alcanza a leer el cambio de estado del contador una vez que se pulso el botón por segunda vez.
Espero me puedan ayudar, llevo un rato quebrando me la cabeza con este pequeño programa.