Arduino : accendere un led tramite linea seriale
L’esempio forse è banale per i più, ma dato che mi sono ritrovato a scriverlo per aiutare una persona, tanto vale metterlo on-line perchè possa servire ad altri.
In questo semplice esempio andiamo ad accendere/spegnere il led già integrato sulla scheda di Arduino, connesso alla porta n°13. Il led verrà pilotato da comandi inviati sulla linea seriale.
In particolar modo digitando la lettera L (sia maiuscola che minuscola), il led invertirà il suo stato e questa condizione viene anche riportata sulla seriale.
Premendo un pulsante diverso da L, non si avrà nessun effetto e su seriale verrà restituito il tasto premuto.
Il codice è abbastanza commentato per cui non penso ci sia bisogno di spiegarlo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | /* Esempio di accensione del led connesso sulla porta 13 da un comando inviato sulla porta seriale. Bernardo Giovanni www.settorezero.com */ #define led 13 // led connesso al pin n°13 byte rx = 0; // variabile per contenere il carattere ricevuto void setup() { Serial.begin(9600); // imposto la UART per lavorare a 9600 pinMode(led, OUTPUT); // imposto il pin sul quale è collegato il led come uscita Serial.flush(); // svuoto il buffer di ricezione seriale } void loop() { if (Serial.available() >0) // Controllo se il buffer di ricezione contiene qualcosa { rx = Serial.read(); // leggo il carattere ricevuto e lo memorizzo in rx Serial.flush(); // svuoto il buffer di ricezione seriale if (rx=='L' || rx=='l') // ho ricevuto la L maiuscola o minuscola { if (digitalRead(led) == HIGH) // il led era acceso? { digitalWrite(led,LOW); // lo spengo Serial.println("Led spento"); } else // il led era spento { digitalWrite(led,HIGH); // lo accendo Serial.println("Led acceso"); } } else // non ho ricevuto la L { Serial.print("Hai premuto: "); Serial.print(rx,BYTE); Serial.println(); } } } |
La prova di funzionamento la possiamo eseguire dallo stesso terminale seriale di Arduino, accessibile dal menù Tools -> Serial Monitor:
Digitando la lettera L viene invertito lo stato del Led: