Hola a todos.
Ando con mi primer proyecto y... mi primer atasco.
![]()
He mirado en el foro y, aunque he encontrado varios posts sobre salir de bucles, no he visto ninguno que resuelva el problema específico que me ha surgido.
La idea es controlar una serie de salidas con el puerto de serie, entre ellas unos leds.
Los leds tienen que encenderse progresivamente con una entrada del puerto ('1') y quedarse oscilando (como si fuesen un fuego. Luego, con otra pulsación ('2') se deberían apagar.
He escrito unas funciones a las que llamo desde el loop, una para encender, otra para apagar y otra para la oscilación del led:
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop()
{
if (Serial.available() > 0)
{
estado = Serial.read();
}
if (estado == '1')
{
encendido();
flame();
}
if (estado == '2')
{
apagado();
}
}
Esta es la función que contiene el código para simular la oscilación del led:
void flame()
{
for (; estado == '2'; i = random(120) + 135)
{
analogWrite(led, i);
delay(15);
}
}
en la que "i" es la variable que uso para aumentar y disminuir la luminosidad del led.
En general, el sketch funciona en cuanto a las entradas del puerto serie y todo eso, el problema es que no consigo salir del loop cuando pulso ('2') a pesar de que el for incluye esa condición (for; estado == '2'; i = random(120) + 135).
He probado a sustituir esa condición por otra, por ejemplo una variable bool que cambia cuando pulso el apagado... pero nada.
Es como si, una vez que entra en ese bucle ya no escucha las entradas del puerto serie.
Alguien que sepa más de programación que yo (o sea, el resto de la humanidad) puede ayudarme? Intuyo que es un problema básico de planteamiento propio de un novato como yo.
Gracias de antemano.
![]()