2 from serial import Serial
3 from datetime import datetime
14 self.time = datetime.utcnow()
21 def __init__(self, config):
29 self.serial = Serial(self.port, \
30 baudrate = self.config.baudrate, \
31 parity = self.config.parity, \
32 bytesize = self.config.databits, \
33 stopbits = self.config.stopbits, \
35 self.serial.flushInput()
36 except Exception as ex:
40 if self.serial and self.serial.isOpen():
44 if self.serial == None:
46 if self.serial.isOpen() == False:
57 if not self.running():
59 while self.serial.readable():
61 char = self.serial.read().decode()
62 except Exception as ex:
66 if char == '\r' or char == '\n':
67 if len(self.inbuf) == 0:
69 line = "".join(self.inbuf)
70 item = self._parse_ascii(line)
74 self.inbuf.append(char)
76 print("Error: exceeded read limit")
82 def _parse_ascii(self, line):
83 acc_re = compile("\[ACC\] accX=(.*) accY=(.*) accZ=(.*)")
84 mag_re = compile("\[MAG\] magX=(.*) magY=(.*) magZ=(.*)")
85 lgt_re = compile("\[LGT\] Light Intensity=(.*)")
86 tch_re = compile("\[TCH\] Force=(.*) Distance=(.*)")
87 a2d_re = compile("\[A2D\] ...")
89 acc_m = acc_re.match(line)
90 mag_m = mag_re.match(line)
91 lgt_m = lgt_re.match(line)
92 tch_m = tch_re.match(line)
93 a2d_m = a2d_re.match(line)
97 state.acc[0] = float(acc_m.group(1))
98 state.acc[1] = float(acc_m.group(2))
99 state.acc[2] = float(acc_m.group(3))
101 state.mag[0] = float(mag_m.group(1))
102 state.mag[1] = float(mag_m.group(2))
103 state.mag[2] = float(mag_m.group(3))
105 state.light[0] = float(lgt_m.group(1))
107 state.touch[0] = float(tch_m.group(1))
109 state.a2d[0] = float(tch_m.group(1))
110 state.a2d[1] = float(tch_m.group(2))
111 state.a2d[2] = float(tch_m.group(3))
112 state.a2d[3] = float(tch_m.group(4))
113 state.a2d[4] = float(tch_m.group(5))
114 state.a2d[5] = float(tch_m.group(6))