Differenze tra le versioni di "Arduino e comunicazione seriale"

Da GolemWiki.
(bozza)
 
m (bozza xbee)
Riga 47: Riga 47:
  
 
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.
 
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.
 +
<!--
 +
In scrittura
 +
==Comunicazione radio: gli XBee==
 +
Attenzione! per questo progetto sono necessarie '''due schede Arduino''' oppure una scheda e un '''convertitore [http://www.robot-italy.com/it/usb-to-serial-micro-converter.html USB-Seriale]''' e due moduli XBee con relativi adattatori.
 +
Gli XBee sono moduli radio, però non possono essere collegati direttamente ad Arduino, per questo serve un adattatore, ad esempio [ XBee Shield] o [http://www.ladyada.net/make/xbee/ XBee adapter di Ladyada]. Prima di collegare l'XBee ad Arduino, bisogna configurare entrambi i moduli per poter dialogare fra loro e con la scheda, e sul sito di ladyada è presente una [http://www.ladyada.net/make/xbee/usermanual.html guida] molto esaustiva.
  
 +
In breve, bisogna 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:
 +
{| border="1" width="500" align="center"
 +
| +++
 +
|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
 +
|}
 +
 +
Una volta configurati entrambi, puoi collegarli uno ad Arduino e l'altro al computer.
 +
-->
 
[[Category:Howto]]
 
[[Category:Howto]]

Versione delle 21:53, 16 nov 2012


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.