Arduino e comunicazione seriale

Da GolemWiki.
Versione del 1 nov 2012 alle 21:49 di Giulio (discussione | contributi) (bozza)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Pulsante-arduino.gif Stai leggendo la guida "Arduino"


Il chip FTDI accanto al connettore USB di Arduino

Arduino sfrutta il protocollo seriale per comunicare con il computer e per ricevere i programmi, attraverso i due piedini digitali 0 e 1 (TX ed RX); prima abbiamo evitato di usarli proprio per non intralciarne le operazioni di caricamento dei programmi: nel circuito stampato sono collegati al chip FTDI (Atmega8U2 nella versione uno), che si occupa di convertire il segnale TX/RX in protocollo USB. Vediamo come sfruttare questa funzionalità riprendendo il codice del potenziometro e aggiungendo alcune righe;

//seriale.ino
const short sensore = 0;
void setup() {
	Serial.begin(9600);
}
void loop() {
	Serial.print("Lettura:");
	Serial.println(analogRead(sensore));
}

Serial.begin(9600) abilita la seriale, ad una velocità di comunicazione di 9600 baud, mentre con Serial.print() si invia al ricevente il codice scritto nelle parentesi tonde; la differenza fra print e println è che il secondo include anche il ritorno a capo.
Dopo averlo caricato apri il serial monitor attraverso il pulsante Arduino-serialm.gif, e imposta la velocità di comunicazione (di default a 9600 baud); a questo punto puoi leggere i dati nello spazio inferiore, ed inviare caratteri ad arduino tramite la barra superiore. Dovresti vedere, ad intervalli di mezzo secondo, i valori del sensore analogico.

Arduino-serialmonitor.jpg

Lettura seriale

//seriale2.ino
const short sensore = 0;
const short led = 13;
void setup() {
	Serial.begin(9600);
	pinMode(led, OUTPUT);
}
void loop() {
	if (Serial.available() > 0)
	{
		switch (Serial.read()) {
			case 'a':	digitalWrite (led, HIGH); break; 
			case 's': digitalWrite (led, LOW);	break; 
			case 'p': Serial.println(analogRead(sensore));	break;
		}
	}
}

Sempre con il circuito precedente, puoi provare anche questo listato, che fa uso anche della comunicazione verso arduino: quando si inviano dei dati alla scheda, essi vengono immagazzinati in una memoria apposita, il buffer, e tramite la funzione Serial.available() si verifica quanti caratteri sono arrivati e in attesa di essere letti. Con Serial.read() si procede quindi alla lettura dei dati: questa funzione non restituisce stringhe, ma soltanto caratteri, perché legge un carattere alla volta dal buffer; una volta letto, il carattere viene rimosso dal buffer, e quelli che lo precedevano "scalano" al suo posto.

Con questo listato puoi accendere il led 13 inviando 'a', spegnerlo con 's', e farti stampare il valore del sensore analog 0 (A0) inviando 'p'; quindi, se invii la stringa "aspa", arduino accende il led, lo spegne, invia i dati del sensore e riaccende il led.