Soy nuevo programando arduino y necesito terminar un programa que no logro resolver AYUDA!

Estoy aprendiendo a programar arduino y se me a pedido hacer un programa que encienda tres leds por medio de comunicacion serial pero aun no logro realizar una instrucción:
Se tienen tres leds los cuales se encienden al mismo tiempo si de escribe "a" en el monitor serial.
Estos tres leds se apagan todos al ingresar el caracter "c".
Cuando ingresemos el caracter "b" se debe de encender el led 1 por un segundo y luego se apaga, despues el led 2 se enciende por un segundo y se apaga para finalmente encender el led 3 un segundo y apagarse, despues de la secuencia realizada se repite la secuencia.
El problema esta en que cuando ingresemos "c" todo debe apagarse
y no logro realizar la ruptura de la secuencia al ingresar "c".
Por favor que alguien me ayude llevo 2 dias enteros con este problema y es el primer programa que me da problemas, soy principiante y no conosco en su totalidad todos los ciclos y muchas cosas que aun estoy por aprender.
Este es el programa que tengo hasta ahora ya lo modifique muchas veces pero el resultado final que obtuve es el siguente:
int led1 = 2;
int led2 = 3;
int led3 = 4;
char leer;
int est = 0;
int j;
boolean prendido = false;

void setup () {
Serial.begin(9600);
for (j = led1; j <= led3; j++) {
pinMode(j, OUTPUT);
}
}
void loop () {
leer = Serial.read();
if (leer == 'a' && prendido == false) {
for (j = led1; j <= led3; j++) {
digitalWrite(j, HIGH);
prendido = true;
}
}
if (leer == 'c' && prendido == true) {
for (j = led1; j <= led3; j++) {
digitalWrite(j, LOW);
prendido = false;
}
}
if (Serial.read() == 'b') {
est = est + 1;
Serial.println(est);
}
while (est >= 1) {
for (j = led1; j <= led3; j++) {
digitalWrite(j, LOW);
digitalWrite(j, HIGH);
delay(1000);
digitalWrite(j, LOW);
delay(1000);
leer == est;
}
if (leer == 'c' && est <= 1) {
est = 0;
break;
}
}
}

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código y además el título. Coloca algo que tenga que ver con lo que consultas. Nada de que soy nueva... Ayuda y cosas que no sirven. Todo el que viene al foro pide ayuda. Pedirla esta de mas.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


int led1 = 2;
int led2 = 3;
int led3 = 4;
char leer;
byte orden = 0
// int est = 0;
// int j;
// boolean prendido = false;

void setup () {
  Serial.begin(9600);
  for (byte j = led1; j <= led3; j++) {
    pinMode(j, OUTPUT);
  }
}

void loop () {
  if(Serial.available()){
    leer = Serial.read();
    if((leer >= 'a') && (leer <= 'c')) {
      orden = leer - 'a' + 1;
    }
  }

  if (orden == 1) {  // 'a'
    for (byte j = led1; j <= led3; j++) {
      digitalWrite(j, HIGH);
    }
    orden = 0;
  }

  if(orden == 2) {  // 'b'
    for (byte j = led1; j <= led3; j++) {
      digitalWrite(j, HIGH);
      delay(1000);
      digitalWrite(j, LOW);
    }
  }

  if (orden == 3) {  // 'c'
    for (byte j = led1; j <= led3; j++) {
      digitalWrite(j, LOW);
    }
    orden = 0;
  }
}

Trata de entenderlo y pruébalo.

Te hago un par de aclaraciones para que entiendas más fácilmente

orden = leer - 'a' + 1;

hace que orden valga 1 cuando se lee 'a', 2 cuando 'b' y 3 cuando 'c'.

Si orden = 0 entonces no hay nada nuevo que ejecutar.

En la secuencia correspondiente a 'b' no pongo orden en 0 para que la misma se repita si no se leyó ninguna letra válida.

Así como está, si está ejecutando la secuencia 'b', no va a responder a otra orden hasta que se complete la secuencia. Tenlo en cuenta.

Por favor corrige lo que te pidió el moderador, tu código debe verse como el mío.

Saludos

Despues de la recomendación de gatul, te diría que miraras switch-case de C++

ve preguntando si orden es 1 (a) entonces haces lo que necesites, si es 2 (b), ...
Saludos.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.