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:
Questo articolo ti è stato utile? Ti ha permesso di risolvere un problema o di migliorare le tue applicazioni? Ci lavori? Ti ha permesso di scrivere la tua tesina? Ti ha semplicemente fatto spendere un po' del tuo tempo in maniera costruttiva? Allora clicca il banner qui sotto:
#1 da gomez85 il 1 novembre 2011
Leggendo il tuo articolo mi è sorto un dubbio, come poter comunicare una qualsiasi istruzione ad Arduino tramite seriale ovviamente senza utilizzare il suo monitor.
Esempio ho Arduino connesso tramite USB al mio PC alla COM1 e tramite un software scritto in JAVA ad esempio voglio inviarli il comando per abilitare un PIN digitalWrite(PIN, HIGH) oppure voglio sapere il valore del sensore connesso sull’ingresso analogico analogRead(PIN)
Sai se una cosa del genere è fattibile? se si quali sono le linee guida?
Grazie in anticipo
#2 da Giovanni Bernardo il 1 novembre 2011
Ovvio che è fattibile. Il monitor è stato messo perchè non tutti sanno scriversi un software sul pc che possa comunicare sulla seriale.
#3 da enzocavallaro il 5 marzo 2017
Vi pongo una domanda forse banale: è possibile “flashare” il programma in arduino senza usare l’ide.
Può essere necessario se si sviluppa un progetto per la rivendita, in modo da non fare i sorgenti ma solo l’hex.
Grazie
#4 da Giovanni Bernardo il 5 marzo 2017
ci sono tantissimi tutorial sull’argomento. Cerca “Arduino Hex upload” con google