import serial import sys class Const: S5 = 35 S2 = 36 S1 = 32 S3 = 39 S4 = 34 B1 = 26 class Pin: def __init__(self, id, initValue): self.id = id self.value = initValue def updateValue(self, value): if (self.value > value): diff = self.value - value self.value = value return (self, -1 * diff) elif (self.value < value): diff = value - self.value self.value = value return (self, diff) else: return (self, 0) 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: self.ser.close() self.ser.open() 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 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 print(pin[0].id, pin[1])