所以想了好久解決.....
主要是運用 pyserial 的timeout 和 writetimeout
當連結斷掉的時候,會造成兩件事:
- Python 寫資料給Arduino 的時候會造成writetimeout
- Python 讀不到 Arduino 資料的時候會造成timeout
由於 COM PORT 要先關掉才能重連,所以先關掉再開PORT直到成功:
def reconnect():
global error
s.close()
error = 1
while error == 1:
try:
s.open()
error = 0
except:
print "Error connection"
error = 1
然後再寫入的部分:
try:
s.write("a")
except:
print "time out"
reconnect()
s.write("a")
而讀取的時候 serial.readline 會自動timeout(要先設定)而跳過
所以不用動
所以總結以上
當Arduino 和 PC 斷線的時候:
寫入失敗=>reconnect()=>再次寫入
讀取失敗=>跳過直到寫入失敗=>reconnect()
不過我還在想有沒有比較好的方法......
畢竟這樣搞,讀11個 data 都 timeout的話
要等至少一分鐘才會重連 = =