CerveauPy2026/LectureReception.py

64 lines
1.8 KiB
Python

import struct
import serial
from time import sleep
from time import time
ser = serial.Serial('/dev/ttyACM0' , 115200)
def ping(ser):
# lecture de 1 octet à l'adresse 0.
ser.write(b'\xFF\xFF\x05dD\x00\x01\x00')
pass
def lecture_Detection(ser):
ser.write(b'\xFF\xFF\x05dD\x00\x0C\x00')
messages, tmp = lire_message(ser, b'')
for message in messages:
print("{:.3f} {} {} {} {} {} {}".format(time(), message[2], message[3], message[4], message[5], message[6], message[7]))
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[offset-1:taille_message+offset]
return None
# Renvoi les message lus.
# Les deux octets de début \xFF \xFF ne sont pas contenu dans le message
# octet 0 : id_carte émettrice
# octet 1 : Nombre d'octets reçus
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.01)
while(1):
messages, data = lire_message(ser, data)
for message in messages:
print(message)