56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
import struct
|
|
import serial
|
|
from time import sleep
|
|
from time import time
|
|
|
|
|
|
ser = serial.Serial('/dev/ttyACM0' , 115200)
|
|
|
|
|
|
def lecture_Detection(ser):
|
|
ser.write(b'\xFF\xFF\x05dP\x00\x0C\x00')
|
|
messages, tmp = lire_message(ser, b'')
|
|
for message in messages:
|
|
print("{:.3f} {}".format(time(), message[1]))
|
|
|
|
def check_message(message, offset):
|
|
offset = offset + 3 # on saut '\xFF\xFF + id'
|
|
if(len(message) > 0 + offset):
|
|
taille_message = message[0+offset]
|
|
if(len(message) > taille_message + offset):
|
|
if(message[taille_message+offset] == 0):
|
|
return message[0+offset:taille_message+offset]
|
|
return None
|
|
|
|
def lire_message(ser, old_data):
|
|
data = old_data
|
|
nb_read = ser.in_waiting
|
|
offset = 0
|
|
valid_offset = 0
|
|
messages = []
|
|
if nb_read > 0:
|
|
data += ser.read(nb_read)
|
|
while offset > -1:
|
|
offset = data.find(b'\xFF\xFF', offset)
|
|
if(offset > -1):
|
|
message = check_message(data, offset)
|
|
if message is not None:
|
|
messages.append(message)
|
|
valid_offset = offset
|
|
offset = offset + 1
|
|
data = data[valid_offset:]
|
|
return messages, data
|
|
|
|
|
|
if __name__ == "__main__":
|
|
data = b''
|
|
while 1:
|
|
lecture_Detection(ser)
|
|
sleep(0.001)
|
|
|
|
while(1):
|
|
messages, data = lire_message(ser, data)
|
|
for message in messages:
|
|
print(message)
|
|
|
|
|