2008-10-12 97 views
5

我有一個Arduino通過串口發送和接收Python腳本的指令。檢查串口是否正在偵聽

阿爾杜伊諾需要一個按鈕狀態,並且當它被按下時,它會通過串行端口將消息發送到一個Python腳本並等待響應。 (通過Serial.available())。它工作得很好。但是,如果Python腳本因任何原因崩潰(理想情況下它會在後臺運行,因此無法輕易檢查),Arduino將永遠等待,即使在腳本重新啓動時也將無法使用。

有沒有辦法讓我的Arduino檢查串口是否有東西在監聽? (如果沒有,閃爍的燈光等提醒我)或者這不是串行工作方式?最糟糕的情況我想我可以使用超時,但這並不理想。

回答

6

你要檢測是否存在通過使用DSR/DTR引腳東西監聽對方的能力有限。

當你打開你的腳本上運行的機器上的串行端口,它應該提高它的DTR引腳(或你應該能夠說服它這樣做:庫的文檔中,你用它來驅動器應該COM端口告訴你如何)。然後,在你的Arduino上,你可以定期檢查它的DSR引腳(假定Null-modem接線與握手,其中PC DTR引腳連接到Arduino上的DSR + CD),然後處理'nobody connected '以任何你認爲合適的方式。這種方法

一個問題是,您的PC腳本可能無法關閉串口,當它崩潰/停止響應,留下彷彿一切都還行啓用DTR引腳。此外,由於串行線路上的錯誤,您的腳本可能會錯過Arduino的消息。

因此,您應該總是使用在您的接收例程中實現一個超時:即使有一方正在另一端偵聽,也不能保證它已收到您的消息(或其響應將達到您完整)。

重新發送該消息的至少一次(假定DSR升高)如果發生超時,使你的協議更可靠。

+0

乾杯隊友。作爲一個有趣的觀點,谷歌在發佈它3分鐘後選擇了你的答案。 – Hyposaurus 2008-10-12 11:07:02

0

我同意MDB是超時是必要的,但也想補充一點,你可能想實現簡單的挑戰/響應系統,如果有人在聽的是定期檢查。 (我喜歡ircd的乒乓球比喻)。

1

Arduino的不使用DSR線或任何其他握手線,所以你不能你有什麼建議。

相關問題