Hola a todos.
Quería preguntaros sobre un pequeño problemilla que ya he resuelto pero al que no le encuentro una respuesta muy lógica.
He hecho un efecto amanecer para mi acuario. Y una vez que ha terminado de "amanecer" puedo seleccionar mediante un solo pulsador, 3 opciones de potencia.
La verdad es que todo funciona bien hasta que una vez que ha "amanecido" el código está continuamente leyendo el pulsador. Y todo va bien y puedo elegir la potencia de salida. Pero si estoy dos o tres minutos sin pulsar nada, automáticamente se reinicia todo y empieza de nuevo con el efecto amanecer sin que en ningún momento yo le diga que salga del código de leer el pulsador.
A base de hacer pruebas he podido solucionarlo cambiando una llave de sitio.
En mi opinión (de novato) creo que la llave estaría bien en cualquiera de los dos sitios. Pero no entiendo por qué al estar donde está ahora, sí que funciona bien, y si dejo la llave que está más arriba y quito la de abajo, se reincia el programa.
He pensado en el watchdog por eso de que está siempre leyendo el pulsador, pero no sé si arduino tiene de eso.
También me ha comentado un amigo que tal vez sería mejor usar un "while" en lugar de un "if" para la lectura del pulsador. Pero tampoco sé si arduino acepta el "while". De hecho lo he probado pero no ha cambiado el resultado.
Si pudiérais echar un vistazo al código que es muy sencillo y ver la diferencia entre las dos llaves que os digo, tal vez me podríais resolver esta pequeña duda que aunque no me impide hacer el circuito porque ya he encontrado solución, sí que me gustaría tener más clara para el futuro.
Gracias y un saludo.
int led = 9; // the pin that the LED is attached to
int brightness = 200; // how bright the LED is
int fadeAmount = 1; // how many points to fade the LED by
int pulsador =8;
int contador = 0;
void setup() {
Serial.begin (9600);
pinMode(led, OUTPUT);
pinMode (pulsador, INPUT);
}
void loop() {
amanecer();
}
void amanecer()
{
brightness = brightness - fadeAmount;
Serial.println (brightness);
analogWrite(led, brightness);
delay (500);
if (brightness <= 25) {
Serial.println (brightness);
analogWrite(led, 25);
pulsadores();
}
}
void pulsadores ()
{
delay(50);
if ( digitalRead (pulsador) == HIGH){
delay(500);
contador++ ;
//} // Esta llave es la que tengo que poner comentada.Y la que está más abajo, justo encima de "pulsadores();" es la que tengo que dejar puesta.
if (contador ==1){
analogWrite (led,179 );
delay (50);
pulsadores();
}
if (contador == 2){
analogWrite(led, 98);
delay(50);
pulsadores();
}
if (contador == 3){
analogWrite(led, 25 );
contador = 0;
delay(50);
}
} // Esta llave es la que tengo que dejar puesta. Y la que está más arriba, justo debajo de "contador ++" la que tengo que quitar.
pulsadores();
}