2017-07-02 233 views
0

私は、Pythonがいくつかの情報を送信している限り、pythonコードによってarduinoに送信される情報に基づいて、LEDを点滅/消すサンプルコードを書いています。コードはいつか実行され、ある時点の後にはうまくクラッシュし、このエラーが発生します。このエラーは何ですか?なぜこれが発生しますか?writeTimeoutErrorのためにPythonでコードがクラッシュするのを防ぐには?

File "C:\PYTHON~1\lib\site-packages\serial\serialwin32.py", line 261, in write 
raise writeTimeoutError 
serial.serialutil.SerialTimeoutException: Write timeout' 

Pythonコード:

def glow_the_LED(set_accepted_list,set_list_ant_id,set_forbidden_list): 
    if ((len(set_accepted_list & set_list_new_id)) >0 & ((set_forbidden_list & set_accepted_list) == set())) : 
     print"yes,bright the LED" 
     use_LED(1) 
    else: 
     print"no,dim the LED" 
     use_LED(0) 
    set_for_comparison = set(set_accepted_list & set_list_new_id) 
    return set_for_comparison 

def establishing_connection(): #for establishing connection 
    x = ser.read(); 
last_action = -1 

def use_LED(activate): 
    global last_action 
    global serial 
    if(last_action != activate): 
     ser.write(activate) 
     print "should open door -> " + str(activate) 
    last_action = activate 

Arduinoのコード:

bool lastAction = true; 
void setup() { 
    Serial.begin(38400); 
    while(!Serial){}//wait until the serial port is connected 
    Serial.write('1'); 
    pinMode(10 ,OUTPUT); 
} 

void loop() { 
    if(Serial && Serial.available()) 
    handleData(); 
    } 
    delay(50); 
} 

void handleData() 
{ 
    char a = Serial.read(); 
    if(a == 'e') 
    { 
     Serial.end(); 
    } 
    else 
    { 
     digitalWrite(10,lastAction); 
     lastAction =! lastAction;  
    } 
    Serial.write('1');//ack 
    Serial.flush(); 
} 

私はすべての関数を呼び出し、正しくarduinoのとPythonとの間の接続を設定します。コードも正常に動作しますが、後で上記のエラーでクラッシュします。

答えて

0

あなたのコードを見ることなく、データが速すぎると思われます。このメッセージは、シリアルバッファがいっぱいであることを意味します。特に、ハードウェアハンドシェイクが有効になっていない場合(Arduinoのシリアル設定と共通)書き込みを遅れてペーシングして、writeTimeout以上のボーレートを設定してみてください。私たちが助けるためにあなたのコードを投稿してみてください。

+0

@ JLH情報が追加されました。 –

+0

私はボーレートで再生しようとし、writeTimeoutを設定しました。それは助けにはならない。 –

関連する問題