2009-10-24 39 views
9

好的,所以我非常樂觀,我的Arduino電路是正確的,並且是它的代碼。我知道這一點,因爲當我使用內置於Arduino IDE中的串行監視器併發送'H'時,一個LED亮起,當我發送'L'時,LED熄滅。Arduino的Pyserial問題 - 與Python shell一起使用,但不在程序中

現在,我做了一個Python程序

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

當我運行LED閃爍的代碼,第二則追溯到了。 但是,當我在shell中單獨執行這些行時,它的工作方式與它應該的相同。

任何想法?

+0

它可能與被垃圾回收的Serial對象有關嗎? – Autoplectic 2009-10-24 18:09:02

回答

5

我有同樣的問題,如果我打開串行連接寫入它的時間約2秒延遲,1秒是不夠的。

+0

寫之前2秒的延遲也爲我解決了這個問題。 – Phil 2010-12-10 04:45:07

8

當您打開串口時,會導致Arduino重置。由於Arduino需要一些時間來啓動,所有的輸入都轉到bitbucket(或者可能是上帝知道它的啓動器)。如果你插入一個睡眠,你等待Arduino上來,以便你的序列碼。這就是它交互式工作的原因。您正在等待軟件出現所需的1.5秒。

我確認打開串口重置我的Arduino Uno;我閃過一個程序,該程序將使setup()例程的LED閃爍 - 呼叫open("/dev/ttyACM0")足以觸發復位。這是恕我直言,在串行支持混亂和無證的皺紋。

+0

請參閱[Arduino Playground](http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection)獲取解釋。 – 2014-09-10 00:06:22

1

爲了讓它更清晰一點,我將修改代碼,以便每個人都能看到需要添加的內容!

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

在睡眠狀態中添加有助於讓序列無任何問題地打開!