import serial import sys import argparse class Const: _ = { 35:"Крутилка 5", 36:"Крутилка 2", 32:"Крутилка 1", 39:"Крутилка 3", 34:"Крутилка 4", 26:"Кнопки" } FULL = 100 class Pin: def __init__(self, id, initValue): self.id = id self.value = initValue self.name = Const._[id] if id in Const._ else None def updateValue(self, value): if self.value == value: return (self, 0) #elif abs(self.value - value) in [1,2,3,4]: # return (self, 0) else: self.value = value return (self, value) class SerialListener: ser: serial.Serial = None pins = {} def __init__(self, device = '/dev/serial0', rate = 9600): self.ser = serial.Serial(device, rate) def reInit(self): if self.ser: try: self.ser.close() self.ser.open() except: pass def listen(self): while True: try: if self.ser.in_waiting > 0: data = self.ser.readline().decode().split("\n")[0].split("-") pin = int(data[0]) value = int(data[1]) if pin not in self.pins: self.pins[pin] = Pin(pin, value) else: yield self.pins[pin].updateValue(value) except ValueError: continue except KeyboardInterrupt: print("exit from main loop") sys.exit(0) except: self.reInit() if __name__ == "__main__": listener = SerialListener() for pin in listener.listen(): if pin[1] == 0: continue if pin[0].name != None: print(pin[0].name, pin[1])