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