Echo (eco) in seriale
Lo sketch proposto qui sotto effettua l'eco (echo) dei dati che arrivano dalla porta seriale, ovvero qualsiasi byte inviato tramite porta seriale dal PC verso Arduino, viene rimandato al PC.
Una volta caricato in Arduino il programma sottostante è sufficiente aprire il monitor seriale e scrivere nella riga in alto qualsiasi testo e poi premere "Send" o "Invia" (a seconda della lingua utilizzata dalla IDE di Arduino installata). Automaticamente il testo comparirà nel monitor seriale.
Attenzione: per eseguire correttamente l'operazione è necessario togliere i caratteri di "fine riga" che vengono aggiunti automaticamente quando si preme il pulsante "Send"
void setup() {Serial.begin(9600);}void loop() {if ( Serial.available()>0 ){char dato = Serial.read();Serial.write(dato);}}
Si osserva l'utilizzo della funzione Serial.write() al posto della più nota Serial.print().
Serial.write() permette di inviare dati in forma binaria, ovvero come una sequenza di byte. Questa funzione accetta come parametro un array di byte o un singolo byte, e invia i dati corrispondenti sulla porta seriale, per esempio:
Serial.write(0x45);
trasmette in seriale il valore 45 in base 16 ovvero il byte 01000101;
Serial.write(65);
trasmette il valore 65, ovvero il byte 1000001.
Serial.print() permette di inviare dati in formato testuale. Questa funzione accetta come parametro una variabile di qualsiasi tipo (come ad esempio un intero, un float, una stringa, ecc.), e converte il valore della variabile in una stringa di caratteri che viene inviata sulla porta seriale. Ad esempio:
Serial.print('a');
invia in seriale il carattere 'a' che in ascii corrisponde al valore 97 in decimale, ovvero al byte 01100001.
Per inviare la stringa "Hello World" sulla porta seriale si può usare la seguente istruzione:Serial.print("Hello World");
In sintesi, Serial.write() invia i dati in forma binaria, mentre Serial.print() invia i dati in formato testuale. Nell'esempio viene utilizzato Serial.write() perché non è necessario eseguire alcuna interpretazione di quanto ricevuto (non ci interessa sapere se gli 8 bit rappresentano un numero o un carattere) e quindi, semplicemente, gli 8 bit ricevuti devono essere rimandati uguali in seriale.