2009-10-24 14 views
9

Va bene, quindi sono sicuro che il mio circuito Arduino sia corretto e il codice per esso. Lo so perché quando uso il monitor seriale integrato nell'IDE di Arduino e invio 'H' si accende un LED, quando invio 'L' che il LED si spegne.Problema di Pyserial con Arduino - funziona con la shell Python ma non in un programma

Ora ho fatto un programma Python

import serial 
ser = serial.Serial("COM4",9600) 
ser.write("H") 

Quando eseguo il codice il LED lampeggia per un secondo poi torna fuori. Tuttavia, quando eseguo ciascuna di queste righe separatamente nella shell, funziona esattamente come dovrebbe.

Qualche idea?

+0

potrebbe essere correlato all'oggetto Serial che viene sottoposto a garbage collection? – Autoplectic

risposta

5

Ho avuto lo stesso problema e funziona se aggiungo un ritardo di circa 2 secondi dall'apertura della connessione seriale alla scrittura su di esso, 1 secondo non è stato sufficiente.

+0

Un ritardo di 2 secondi prima della scrittura ha risolto anche questo problema. – Phil

8

Quando si apre la porta seriale, questo causa il reset di Arduino. Dato che Arduino impiega un po 'di tempo per l'avvio, tutto l'input va al bitbucket (o probabilmente al bootloader che sa chissà cosa con esso). Se si inserisce un sonno, si attende che Arduino venga visualizzato in modo tale che il proprio codice seriale. Questo è il motivo per cui funziona in modo interattivo; stavi aspettando i 1,5 secondi necessari per il software a venire.

Ho confermato che l'apertura della porta seriale reimposta il mio Arduino Uno; Ho fatto lampeggiare un programma che lampeggerà il LED dalla routine setup() - la chiamata open("/dev/ttyACM0") è stata sufficiente per attivare il ripristino. Questo è IMHO una ruga confusa e non documentata nel supporto seriale.

+0

Vedere [Arduino Playground] (http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection) per una spiegazione. –

1

Giusto per rendere un po 'più chiaro modifico il codice in modo che tutti possano vedere cosa deve essere aggiunto!

import serial 
import time 
ser = serial.Serial("COM4",9600) 
time.sleep(3) 
ser.write("H") 

L'aggiunta di una statizzazione del sonno consente di aprire la seriale senza problemi!

Problemi correlati