2017-10-28 1 views
1

스위치가 Arduino에서 켜지거나 꺼져 있는지 감지하고, 데이터를 Python으로 보내고 결과를 GUI에 표시하려고합니다. 다음 Python 코드는 직렬 데이터를 Python으로 읽습니다. 다음과 같이; 상기 직렬 출력 결과를Arduino에서 Python의 상태 변경 감지

스위치이다 파이썬 IDE [결과에 따라] 에서 다음의 (I 추가해야하지 내 코드)

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

경우 OFF

스위치

0 ON이면 OFF

경우

스위치 스위치

스위치

스위치 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

을 편집했습니다. 가끔 상태가 정의되지 않았습니다 (사용할 수 없습니까?). 이 경우에도 상태를 '없음'으로 재설정해야합니까? – 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