que problema tengo en el codigo?

hola buen día ante todo soy novato en esto pero me encanta la electrónica como un hobby estuve buscando por el foro y por google una solución pero no tuve suerte quería sabes si me pueden decir que esta mal o que problema tengo en el código que no responde como quisiera.... a la hora de mandar un comando sea 'q' 'w' 'e' o el que sea..... debo mandarlo varias veces para que funcione si alguien me podría ayudas se los agradecería muchísimo desde ya gracias

les dejo acá el código

unsigned long millis_encendido=0;
unsigned long millis_encendido1=0;
void setup(){
Serial.begin(9600); 
pinMode(13,OUTPUT);
digitalWrite(13,0);
pinMode(12,OUTPUT);
digitalWrite(12,0); 
pinMode(11,OUTPUT); 
pinMode(10,OUTPUT); 
pinMode(9,OUTPUT);
}
void loop(){
if(Serial.available()>0){
}
 if (Serial.read()=='q'){
      digitalWrite(13,1);
      millis_encendido= millis();
   }
   if ( millis_encendido && (millis() - millis_encendido)>=500){
      millis_encendido=0;
      digitalWrite(13,0);
      
   }
   if (Serial.read()=='w'){
      digitalWrite(12,1);
      millis_encendido1= millis();
      }
   if (millis_encendido1 && (millis() - millis_encendido1)>=500){
      millis_encendido1=0;
      digitalWrite(12,0);
   }

if (Serial.read()=='e'){ 
digitalWrite(11,1);
}
if (Serial.read() =='r'){ 
digitalWrite(11,0);
}
if (Serial.read() =='d'){ 
digitalWrite(10,1);
}
if (Serial.read() =='f'){ 
digitalWrite(10,0);
}
if (Serial.read() =='c'){ 
digitalWrite(9,1);
}
if (Serial.read() =='v'){ 
digitalWrite(9,0);
}
if (Serial.read() =='z'){ //all off
digitalWrite(11,0);
digitalWrite(10,0);
digitalWrite(9,0);
}
}

No sé tu, pero yo haría lo siguiente:

void loop(){
  char comando;
  if(Serial.available()){
    comando = Serial.read();
    // Serial.flush(); // Descoméntalo en caso de que no se deba leer más de un comando a la vez
  }

  if (comando == 'q') {
      // Sigue el resto de if's a cómo está este
  }

  // Aquí va el resto del código...
}

Te recomendaria que uses Serial.println como forma de debugear y llegar al problema.

Si entras dentro de una condición, insertá un Serial.Print para saber si realmente entró dentro del if.

Probaría inicializando la variables Comando, insertando delays, etc..

fersical:
Probaría inicializando la variables Comando

Ups, esa se me fue :sweat_smile:

Lo correcto sería:

char comando = 0;

Así si no hay nada en el búfer del serial (Serial.available() == 0), ya tenga con qué ,válidamente, comparar luego...