Arduino e comunicazione seriale

Da GolemWiki.
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.

Comunicazione radio: gli XBee

Attenzione! per questo progetto sono necessarie due schede Arduino oppure una scheda e un convertitore USB-Seriale e due moduli XBee con relativi adattatori. Prima di poterli usare, vanno però configurati, e sul sito di ladyada è presente una guida molto esaustiva.

Configurazione

File:Arduino-xbeecfg.jpg
XBee in configurazione

Devi collegare l'XBee al PC usando Arduino (senza chip) o il converitore USB-Seriale come ponte. In questo modo aprendo il Serial Monitor puoi dialogare direttamente con il modulo radio per configurarlo, passandogli alcuni comandi:

+++ test di comunicazione, deve rispondere OK
AT Richiesta di attenzione, risponde OK
ATBD Richiesta o modifica dei baud. Per default è settato a 3 (9600), per cambiarlo si usa ATBD <n_baud>
ATID Codice identificativo dell'XBee. Per comunicare fra loro, gli XBee devono avere lo stesso codice. Per default dovrebbe essere 3332, puoi cambiarlo con ATID <id>
ATWR Applica eventuali modifiche

Collegamento

...in scrittura...