[Solucionado] Rebote en puerto serie.

Hola, mi nombre es Santy y estoy a punto de volverme loco. Soy muy muy novato en arduino, ee seguido tutoriales de domótica con arduino y no logro entender qué pasa con mi código. Veréis, este código a todos les deja encendido el led hasta que vuelves a pulsar otra cosa que no sea el 1, pero a mí me lo deja apagado siempre, y cuando pulso 1 solo enciende 1 milisegundo:

void setup() 
{
   pinMode(12, OUTPUT);
  Serial.begin(115200);
 }
void loop() 
{ 
  if(Serial.available()>0)
  {
    if(Serial.read()=='1' )
    {
      digitalWrite(12, HIGH);
     }
    else
    {
      digitalWrite(12, LOW);
     }
  }
}

Decidí incluir un Serial.println ("Encendido"); y un Serial.println ("Apagado"); dejándolo así:

void setup() 
{
   pinMode(12, OUTPUT);
  Serial.begin(115200);
 }

void loop() 
{
   if(Serial.available()>0)
  {
    if(Serial.read()=='1' )
    {
      digitalWrite(12, HIGH);
      Serial.println( "Encendido" );
    }
    else
    {
      digitalWrite(12, LOW);
      Serial.println( "Apagado" );
     }
  }
}

y cuando pulso 0, el monitor serie escribe:
Apagado
Apagado
Apagado

Cuando pulso 1, el monitor serie escribe:
Encendido
Apagado
Apagado

Es decir, hay como una especie de triple petición, donde sólo la primera es la correcta y las otras son incorrectas.

Pueden ayudarme?

Gracias

caada vez que envias algo por el puerto serie, por defecto envia lo que has escrito y otros dos caracteres mas que son salto de linea (\n) y retorno de carro (\r)

la idea de imprimir por pantalla el Serial.println( "Encendido" ); / Serial.println( "Apagado" ); ha sido clave al darte mi respuesta asi que te felicito por que esa es la manera correcta de proceder ante un problema, en el futuro con mas experiencia seguro que llegaras a resolver tus problemas sin ayuda siguendo este tipo de descartes

solucion: evitar que esos caracteres se envien:

alli en el puerto serie tienes que seleccionar "no line ending"

o bien por código puedes hacer

void setup() 
{
   pinMode(12, OUTPUT);
  Serial.begin(115200);
 }
void loop() 
{ 
  if(Serial.available()>0)
  {
char inchar= Serial.read();
    if(inchar=='1' )
    {
      digitalWrite(12, HIGH);
     }
    else if(inchar!= '\n' && inchar != '\r')
    {
      digitalWrite(12, LOW);
     }
  }
}

Gracias por tu respuesta. Lo probaré y seguro que funciona. Pero, por qué en los video tutoriales que he seguido funciona y en mi caso no?

Es decir, arduino debería comportarse siempre igual, no?

Funciona perfectamente. Ya lo he probado. Es posible que el autor del video tutorial lo tuviera sin retorno de carro ni nueva linea.