2013-05-22 42 views
3

我有一個使用pySerial的問題,我不知道從哪裏開始尋找。 我有一個64位Windows 7操作系統,Python 2.7.5(32位),並已安裝pySerial和Arduino(Arduino正常工作)。pySerial程序不能正確讀取序列

我的Arduino代碼如下:

// the setup routine runs once when you press reset: 
void setup() {     
    // initialize the serial in 19200 baud rate 
    Serial.begin(19200);  
} 

// the loop routine runs over and over again forever: 
void loop() { 
    delay(1000);    // wait for a second 
    Serial.print("hello"); 
} 

(Arduino的conected在COM8,採用串行監視器時,我可以看到它敬禮)

而且我PySerial代碼如下所示:

import serial 
import time 

arduino = serial.Serial("COM8", 19200) 
time.sleep(2) 

while True: 
    print arduino.readline() 

當我啓動這個腳本時,程序運行,但是我看不到串行輸出(我認爲Python腳本中的配置是可以的,因爲如果某些東西 - 例如端口 - 是錯誤,它崩潰)。

我不知道該怎麼做才能找到解決方案。 你能幫我嗎?

+1

我認爲pySerial工作正常...這屬於操作員錯誤... –

+0

是的,我認爲是。但我不知道從哪裏開始尋找答案:( – mekoda

回答

6

您可以嘗試在Arduino/C端使用println而不是print,並且/或者在Python端爲串行讀取設置超時。

由於serial.readline()等待\n,並且您從不使用打印發送,串行讀取只會等待超時。 (但比這更復雜一點,這是值得閱讀的ReadLine和EOL的docs。)

如果這不起作用,至少開關readline只是read並打印出每個你可能字符(或可能而不是)閱讀,但不要等待需要的\n

從演示docs
使用readline()時要小心。打開串口時請指定超時時間,否則,如果沒有收到換行符,可能會永久阻塞。另請注意,readlines()僅適用於超時。 readlines()取決於是否有超時並將其解釋爲EOF(文件結尾)。如果端口未正確打開,則會引發異常。

+0

在此先感謝您的幫助,我使用了另一個Arduino代碼(已經驗證),但是我也無法獲得預期的結果。系統,但我無法找到... – mekoda

+0

更新:使用println解決了這個問題。謝謝! – mekoda