Hola buenas
Me mpresento, soy Fer. Hace poco que me he puiesto de nuevo con Arduino por lo que me considero bastante novatillo. Tengo un problema que no se como solucionar, he buscado mucho y he visto gente con un problema similar al mio pero no me han aclarado muy bien como solucionarlo.
Estoy haciendo un programa muy sencillo, que según la letra introducida por el teclado 'A', 'B' o 'C' me enciende 3 leds de la siguiente manera
'A' enciende los 3
'B' enciende cada led 1sg y se queda en este bucle
'C' apaga los 3 leds.
El problema es que cuando uso el serial.read y lo asigno a una variable. Se que esta función si no detecta nada carga en esa variable un -1. por ello lo que hago es que una vez leida la opción la cargo en otra variable, siempre que la primera no sea -1. Lo curioso es que automaticamente me borra el valor de las variables por si solo.
Entiendo que la primera variable se borre por lo comentado antes, pero la segunda si no se cumple la condición del if no debería cambiar.
Os pongo el código a ver si me podéis comentar donde está el problema. porque he intentado todo lo que se y he podido, y no consigo solución.
La idea es que la variable se quede con el ultimo valor que hay inbtroducido y no cambie hasta que se introduzca un nuevo valor de esta manera la oción 'B' lo hará ciclicamente.
Las otras opciones las hace sin problemas
int led_y = 2;
int led_r = 3;
int led_g = 4;
char valor = 0;
char letra = 0;
void setup() {
pinMode(led_y, OUTPUT);
pinMode(led_r, OUTPUT);
pinMode(led_g, OUTPUT);
Serial.begin(9600);
}
void loop()
{
Serial.println("Introduce una opcion A, B o C");
Serial.print("valor: ");
Serial.println(valor);
valor = Serial.read();
Serial.print("letra: ");
Serial.println(letra);
delay(1000);
if (valor == 'A' || 'B' || 'C')
{
letra = valor;
if (letra == 'A')
{
digitalWrite(led_y, HIGH);
digitalWrite(led_r, HIGH);
digitalWrite(led_g, HIGH);
delay(1000);
}
else if (letra == 'C')
{
digitalWrite(led_y, LOW);
digitalWrite(led_r, LOW);
digitalWrite(led_g, LOW);
}
else if (letra == 'B')
{
digitalWrite(led_y, HIGH);
delay(1000);
digitalWrite(led_y, LOW);
digitalWrite(led_r, HIGH);
delay(1000);
digitalWrite(led_r,LOW);
digitalWrite(led_g, HIGH);
delay(1000);
digitalWrite(led_g, LOW);
}
}
}
Lo dicho muchas gracias por vuestra ayuda