Arduino/bash e porta seriale: differenze tra le versioni
(creazione della pagina) |
(continuazione) |
||
Riga 1: | Riga 1: | ||
+ | {{TOC|align=right}} | ||
+ | <div style=tex-align:justify> | ||
Usiamo [http://www.processing.org| Processing]? | Usiamo [http://www.processing.org| Processing]? | ||
No grazie, '''stiamo imparando'''. | No grazie, '''stiamo imparando'''. | ||
− | |||
Arduino è un dispositivo semplice, cerchiamo di usarlo con strumenti di base.<br/> | Arduino è un dispositivo semplice, cerchiamo di usarlo con strumenti di base.<br/> | ||
− | Dunque la bash. | + | Dunque la bash. [http://it.wikipedia.org/wiki/Bash| Bash] è il '''linguaggio di terminale nativo su Linux'''. Prescelto da Torvalds fin dalla primissima versione del '91. |
− | D' | + | D'accordo. Ora chiediamoci: cosa ci dobbiamo fare, con il terminale?<br/> |
− | + | Semplice. Ci dobbiamo fare ''input/output''.<br/> | |
+ | Allora, se voglio scrivere qualcosa e comunicarlo ad arduino, è un ouput.<br/> | ||
L'output, in bash è gestito dal comando ''echo''. | L'output, in bash è gestito dal comando ''echo''. | ||
Per esempio: | Per esempio: | ||
Riga 16: | Riga 18: | ||
L'input, in bash, è gestito dal comando ''cat'', oppure dal comando ''head''. | 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.<br> | ||
+ | [http://arduino.cc/en/Serial/Read| Questa] è una cosa minimale. O meglio, possiamo usare [[Arduino/leggere_una_stringa_numerica| 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.<br/> | ||
+ | ''Qualche istante dopo'', eseguiamo il cat... Acciderba, '''troppo tardi!''' La risposta si è già perduta.<br/> | ||
+ | |||
+ | 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. | ||
+ | </div> |
Versione delle 17:45, 1 gen 2014
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.