2017-10-28 18 views
1

スイッチがONであるかArduinoであるかを検出しようとしていて、データをPythonに送り、結果をGUIに表示しようとしています 次のPythonコードはシリアルデータをPython次のように; (私は追加する必要がありますない私のコード)ArduinoからのPythonの状態変化の検出

import serial 
ser = serial.Serial('com3',9600) 
ser.flushInput() 
ser.flushOutput() 
while True: 
     ser.flushInput() 
     ser.flushOutput() 
     passcode = ser.read() 

     if passcode == b'1': 
      print("Switch is ON") 
     if passcode == b'0': 
      print("Switch if OFF") 

結果がOFF

場合

スイッチシリアル出力結果である[結果に応じて] PythonのIDE に次のように表示されますOFF

スイッチは

0上にある場合はOFF

切り替えると切り替え

スイッチが

スイッチ上で今

の私の質問ですか?

私はちょうど「1」はPythonの中に、または「スイッチがオフになっている」[ない連続シリアル結果]「スイッチがONである」と理想的ではTkinterの

+0

最も単純な方法は、関数に行を移動し、whileループの中で関数を呼び出すことです。または一度必要なときに直接呼び出します – PRMoureu

答えて

1

マイあなたの質問を理解するには、「どうやって状態変化に対してのみ出力するのですか?」

これを行うには、状態をローカルに保存してから、新しい状態を保存状態と比較する必要があります。 これを行う最も簡単な方法は、switch_stateなどの変数を使用する方法です。

ので:

import serial 

ser = serial.Serial('com3',9600) 
switch_state = None # 0 for off, 1 for on, None - not yet set 

ser.flushInput() 
ser.flushOutput() 

while True: 
     ser.flushInput() 
     ser.flushOutput() 
     passcode = ser.read() 

     if passcode == b'1' and switch_state != 1: 
      print("Switch is ON") 
      switch_state = 1 

     if passcode == b'0' and switch_state != 0: 
      print("Switch if OFF") 
      switch_state = 0 

私は、コードを試していない - これはあなたの問題に簡単な解決策は十分でなければなりません。

+0

を編集しました。この場合も状態を 'None'にリセットする必要がありますか? – PRMoureu

+0

完璧!ありがとう – John

1

に結果を表示すると言って読んで得ることができますどのような方法があります次のパターンでは、他のファイルに関数をインポートして、結果をコンソールまたは任意のtkinterテキストウィジェットに出力することができます。

import serial 
ser = serial.Serial('com3',9600) 
ser.flushInput() 
ser.flushOutput() 

def switch_state(): 
    ser.flushInput() 
    ser.flushOutput() 
    passcode = ser.read() 

    res = "Switch is " 
    if passcode == b'1': 
     res += "ON" 
    elif passcode == b'0': 
     res += "OFF" 
    else: 
     res += "N/A" 
    return res 

if __name__ == "__main__": # this is to avoid executing the loop when importing the file 
    while True: 
     print(switch_state()) 

(これは時々起こるようですような状態は、利用できない場合、あなたが空白の結果を好む場合は、res = ''最初に定義し、別の例で"Switch is ON"または"Switch is OFF"を維持することができます。

+0

responeをありがとう - 私はスクリプトを実行し、次のUnboundLocalErrorでエラーが発生しました:ローカル変数 'res'は代入の前に参照されます。 – John

+0

okは 'ser.read()'のように見えますが、何か他のものを返すことができます、私の答えにあるコメントから関数 – PRMoureu

関連する問題