Arduino/bash e porta seriale
Usiamo Processing?
No grazie, stiamo imparando.
Arduino è un dispositivo semplice, cerchiamo di usarlo con strumenti di base.
Dunque la bash. Bash è il linguaggio di terminale nativo su Linux. Prescelto da Torvalds fin dalla primissima versione del '91.
D'accordo. Ora chiediamoci: cosa ci dobbiamo fare, con il terminale?
Semplice. Ci dobbiamo fare input/output.
Allora, se voglio scrivere qualcosa e comunicarlo ad arduino, è un ouput.
L'output, in bash è gestito dal comando echo.
Per esempio:
* echo "Ciao" # scrive Ciao sul terminale. echo "Ciao" >/dev/arduino # scrive Ciao e redige l'output verso arduino.
L'input, in bash, è gestito dal comando cat, oppure dal comando head.
* cat </dev/arduino # legge dalla porta seriale di arduino. * head -n3 </dev/arduino # legge le prime 3 righe provenienti dalla porta seriale di arduino.
Adesso dobbiamo istruire arduino a gestire la porta seriale.
Questa è una cosa minimale. O meglio, possiamo usare questo, su cui stiamo lavorando.
Scriviamo dunque:
* echo 30 >/dev/arduino * cat /dev/arduino
Sorpresa. Non esce nulla. Anzi il terminale si blocca e siamo costretti a uscirne con la combinazione di tasti Ctrl-c.
Per forza!!! Stiamo lavorando con un dispositivo fisico indipendente, mica con i soliti dispositivi virtuali a cui siamo abituati. Se avessimo provato a scrivere:
* echo 30 >/tmp/prova.txt * cat </tmp/prova.txt
Il risultato sarebbe molto più soddisfacente. E non si incastra nulla.
Qual è la differenza? Il contatto con la realtà. Se spediamo un echo verso arduino, la nostra stringa viene correttamente acquisita e processata, generando una risposta, che viene generata immediatamente.
Qualche istante dopo, eseguiamo il cat... Acciderba, troppo tardi! La risposta si è già perduta.
Davvero, comunicare con Arduino è infinitamente educativo. Soprattutto per noi insegnanti.</br> Prima ancora di fare una domanda, infatti, dovremmo fare attenzione di disporci in ascolto.
Comunicare con arduino costringe a rovesciare l'ordine delle operazioni. Proviamo così:
* head -n1 </dev/arduino & * echo >/dev/arduino
Davvero. È tutta un'altra cosa.