# [arduino] confltti sulla porta seriale

## cloc3

sto cominciando a giocare con arduino.

ho sistemato le cose per lavorare da terminale con scons.

quando voglio leggere la porta seriale, uso miniterm.py (dev-python/pyserial).

a volte però, ho bisogno di effettuare un semplice cat /dev/arduino o di redirigere il flusso di miniterm.py verso una pipe di bash.

in questi casi, incontro degli inceppi non facilmente riproducibili.

a volte le cose funzionano benissimo, altre volte l'ouput langue, altre ancora il cat restituisce un ouput vuoto.

resettare arduino ricaricando lo sketch non sempre giova.

sospetto che la cosa dipenda da demoni non identificati che si affollano sulla porta seriale di arduino a mia insaputa.

come posso fare a controllare il fenomeno e arginarlo?

----------

## pierino_89

Quando ci giocavo io (poi ho comprato raspberry e beaglebone e ho lasciato perdere) ho notato che usare una porta USB3 o un hub ogni tanto crea casini, quindi prova ad attaccarlo direttamente a una porta USB2.

Altra cosa importante, /dev/ttyUSB* (o era ttyACM?) non è detto che abbia settato il baudrate corretto e quindi potrebbe non stamparti nulla, mi pare si possa sistemare con stty. Per il tuo programma in pipe invece non ne ho proprio idea.

Per quanto riguarda eventuali altri demoni la cosa mi risulterebbe strana, perché se ci fosse già qualcun altro sulla porta seriale dovresti ottenere un bel "device busy" o qualcosa di simile. Se la apri e chiudi ogni lettura, invece potrebbe essere plausibile. Però a parte il servizio del modem di NetworkManager non so chi potrebbe andarla a toccare.

----------

## cloc3

 *pierino_89 wrote:*   

> mi pare si possa sistemare con stty

 

si. qualche volta riesco a riprendere il controllo con stty, ma non è un workaround sicuro.

a volte non c'è proprio verso. addirittura devo ributtare la macchina che sembra windows.

non ricevo mai, però, dei "device busy".

----------

## pierino_89

In un progetto ho un lettore RFID usb, che mi crea una seriale ttyACM0 a 9600 baud/s, che se non ricordo male è lo stesso settaggio di Arduino.

A me interessa solo leggere i codici che stampa, riga per riga, quindi ho un programmino che legge un pugno di caratteri e lo sputa su stdout (e fa un flush del buffer subito dopo). In pipe ti giuro che funziona. Vedi se può fare al caso tuo.

https://github.com/pierinz/citofonoweb/blob/rewriteC/serial_read.c

(è l'ultimo arrivato del progetto quindi è fatto abbastanza al volo, ma dovrebbe garantire le funzionalità minime)

----------

## cloc3

alla fine, credo di avere risolto che, nel mio caso, serve questa riga di stty:

```

stty -F /dev/arduino 1:0:1cb2:80:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0

```

molte delle soluzioni che si trovano in internet, funzionano solo in certi casi.

se si accede alla seriale con programmi diversi, infatti, può accadere che uno di essi lasci la seriale in uno stato non utilizzabile agli altri programmi e non ripristinabile con una riga di stty imperfetta.

quella che ho postato sopra sembra piuttosto efficace.

la faccio attivare con una regola di udev e ho aggiunto nel sistema un comando apposito per ripristinare la configurazione all'occorrenza.

non ne sono certo del tutto, ma adesso ho la sensazione di avere trovato una configurazione stabile.

----------

