Robotica educativa/Dal computer ad Arduino
La comunicazione seriale
[modifica | modifica sorgente]In questo capito verrà illustrato come sfruttare la comunicazione seriale per inviare comandi ad Arduino dal proprio computer. L'idea di partenza è – come sempre – la più semplice e accessibile: accendere e spegnere un led.
Schema circuitale
[modifica | modifica sorgente]Di seguito lo schema di montaggio. La resistenza può essere posta sia prima, sia dopo il collegamento ad Arduino.
Da notare che il circuito è identico a quello utilizzato per l'invio di un SOS, ma il codice è profondamente differente, come tutto quello che si verificherà. È bene ricordare anche che – avendo utilizzato il led collegato al pin 13 – il circuito è opzionale, poiché si illuminerà anche il led integrato nella scheda.
Codice
[modifica | modifica sorgente]Le novità introdotte in questo codice sono il tipo char
, per definire un singolo carattere; e il costrutto switch
, che, esegue una porzione di codice in base al dato in input.
In questo caso (essendo due i casi di interesse) si sarebbe potuto utilizzare anche i costrutti if
/else
, ma un codice così strutturato si presta a numerose espansioni, potendo pilotare ricevere differenti comandi e gestirli tutti con un singolo costrutto.
Il comando break;
viene inserito per uscire dal ciclo, una volta soddisfatto un criterio, visto che tutti gli altri sarebbero non soddisfatti. Così facendo il codice è più performante e veloce.
#define led 13 // pin in cui è connesso il LED
#define bitrate 9600 // velocità di comunicazione con la porta seriale
const char keyOn = 'a'; // usa il tasto 'a' per l'accensione
const char keyOff = 's'; // usa il tasto 's' per lo spegnimento
char tastiera; // variabile che memorizza il flusso proveniente dal PC
// Inizializza la porta seriale e l'uscita del LED
void setup() {
Serial.begin(bitrate);
pinMode(led, OUTPUT);
}
void loop() {
tastiera = Serial.read(); // legge i dati provenienti dalla porta seriale
switch(tastiera){
case keyOn: // nel caso riceva 'a'
digitalWrite(led, HIGH); // accende il LED
break;
case keyOff: // nel caso riceva 's'
digitalWrite(led, LOW); // spegne il LED
break;
default: // in ogni altro caso
Serial.flush(); // attende il termine del flusso di dati seriali
break;
}
}
Espansioni suggerite
[modifica | modifica sorgente]- Sostituire il led con un altro attuatore (come un motorino per avviare e fermare una ventola);
- inserire ulteriori comandi che attivino altri attuatori;
- infine, con un relè, si possono controllare dispositivi di potenza per gestire la domotica di casa (da svolgere solo se si è ben consapevoli di quel che si sta facendo).