Buenas, quiero hacer un semáforo de 3 leds (rojo, amarillo y verde) con un pulsador, de forma que al pulsar el pulsador cuando el semáforo esté en rojo, se reduzca el tiempo de espera. El problema es que si lo trato de hacer con if, solo funcionaría si mantengo el botón. Simplemente quiero que si se pulsa en un intervalo de tiempo (aunque sea una sola vez), ya haga eso. Seguramente es una tontería pero soy novato y aunque algunas cosas sean difíciles me está encantando esto.
Y tampoco entiendo por qué no funciona el Monitor Serie, quiero que me informe del valor del pulsador. El código sin semáforo ni nada es este:
int pulsador=8;
int valorpulsador;
void setup(){
pinMode(pulsador,INPUT);
Serial.begin(9600);
}
void loop(){
valorpulsador = digitalRead(pulsador);
Serial.println(valorpulsador);
delay(500);
}
Lo de arriba funciona perfectamente, pero si lo meto en el programa del semáforo muestra dos ceros y punto. He comprobado cuándo deja de funcionar, es al cabo de varias instrucciones, pero si pongo unas pocas sí funciona...
El problema es usar delay eso detiene el código por completo y no hará nada mas que esperar que pase el tiempo.
Mira en la sección de documentación millis y maquina de estados. También te puede servir el ejemplo que hay en el propio IDE en digital, blynkwithoutdelay.
krnlpanic:
El problema es usar delay eso detiene el código por completo y no hará nada mas que esperar que pase el tiempo.
Mira en la sección de documentación millis y maquina de estados. También te puede servir el ejemplo que hay en el propio IDE en digital, blynkwithoutdelay.
Muchas gracias por ayuda, voy a probarlo sin delays. Y ahora miro la instrucción esa, a ver si tengo maña y soy capaz de hacerlo
krnlpanic:
El problema es usar delay eso detiene el código por completo y no hará nada mas que esperar que pase el tiempo.
Mira en la sección de documentación millis y maquina de estados. También te puede servir el ejemplo que hay en el propio IDE en digital, blynkwithoutdelay.
Es verdad, no he caído en cómo lee la placa el código. Lo único que se me ocurre es que haga Serial.println entre cada acción, entonces sí funciona
Nota que solo cuenta cuando pulsas el botón, sin importante cuanto tempo lo hagas. Esto es porque estamos esperando el momento en que de un valor actual = false (botón no presionado) pase a una posición actual = true (botón presionado) y a la vez anterior = false (botón no estaba presionado).