You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

64 lines
1.6 KiB

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])