LED+Serial

Hola!

Este es mi código para encender un led durante 3 segundos, mostrar en pantalla del monitor serial un mensaje y a continuación apagarse.

#include <SoftwareSerial.h>

int input;
int ledPIN = 13;

void setup() {
  Serial.begin(9600);
  delay(200);
  pinMode(ledPIN,OUTPUT);
}

void loop() {
 if(Serial.available() > 0){ //Cuando se lean datos...

  input = Serial.read();
  if(input = 1){
    digitalWrite(ledPIN, HIGH);
    Serial.print("Led encendido!!!");
    delay(3000);
    digitalWrite(ledPIN, LOW);
  }
 }
}

Durante el encendido del LED, me aparece el mensaje pero tras pasar casi 1,5sg, el led guiña y vuelve a aparecer en el monitor "Led encendido!!!"

¿Por qué ocurre esto?

Los errores más graves que tiene tu Sketch son:

  • la comparación de input la haces con 1 solo =, y las comparaciones llevan 2 iguales, asi: a == 1
  • la lectura de Serial es en un codigo ASCII por lo que la comparación deberia ser a un caracter

Algunas otras observaciones:

  • La librería SoftwareSerial.h no es necesaria para este Sketch
  • Tal vez quieras iniciar con el led apagado en tu area setup()
  • Las comparaciones con caracteres se hacen más faciles cuando usas el tipo "char"

Te dejo esos consejos a ver si lo sacas solo, ya que eso te ayudará a aprender más, pero si no lo logras me avisas y te muestro con un Sketch corregido.

Saludos!

Así como está, por cada byte/caracter que reciba, ejecutará la acción. Creo que la forma correcta de comparar el valor es así:

if(input == '1')
if(input = 1)

Equivale a:

if(true)

Pero más exactamente a:

if((input = 1) != 0)

Lo que quiere decir que la condición siempre se cumplía