Ciao a tutti. Ho scritto un piccolo sketch che mi permette di accendere un led per 9 secondi all'invio di '0' da seriale, il tutto senza delay ma con la funzione millis().
const int buttonPin = 4; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
unsigned long off_time;
boolean ledState=false;
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
digitalWrite(ledPin, LOW);
Serial.begin(9600);
}
void loop(){
if ((ledState) && (millis()>=off_time)) /* is it on and is it later or equal to off_time */
{
digitalWrite(ledPin,LOW);
ledState = false;
}
else if (!ledState) /* is it off? */
{
buttonState = Serial.read();
if(buttonState == '0')
{
digitalWrite(ledPin, HIGH);
ledState = true;
off_time = millis() + 9000;
}
else digitalWrite(ledPin, LOW);
}
}
Il programma funziona perfettamente, però ho intenzione di implementare la possibilità di spegnere improvvisamente il led se ad esempio mando il carattere '1'. Ho provato diverse vie, ma nessuna mi ha dato dei risultati soddisfacenti. Da quanto ho capito, la seriale non legge nulla fino a quando non termina i 9 secondi di accensione del led.
Ho provato a inserire una semplice funzione if/else leggendo lo stato logico di un pin di ingresso e solo in questo caso riesco effettivamente a bloccare il led acceso. Come devo comportarmi per poter ottenere questo risultato ma da seriale? Grazie