import struct import serial ser = serial.Serial('/dev/ttyACM0' , 115200) def lecture_Detection(): ser.write(b'\xFF\xFF\x05dP\x80\x21\x00') nb_read = ser.in_waiting data = ser.read(nb_read) # print("nb_read={}".format(nb_read)) list_message = data.split(b"\xff\xffP") # print("nb_read={}, list_message={}".format(nb_read, len(list_message))) if len(list_message)>1: if len(list_message[1])>33: struct_value = struct.unpack('ffffffffB',list_message[1][1:34]) return (struct_value[0],struct_value[1],struct_value[2], struct_value[3], struct_value[4], struct_value[5], struct_value[6], struct_value[7], struct_value[8]) def check_message(message, offset): offset = offset + 2 # on saut '\xFF\xFF' if(len(message) > 0 + offset): taille_message = message[0+offset] print("taille_message + " + str(taille_message)) if(len(message) > taille_message + offset): if(message[taille_message+offset] == 0): print("message valide") return message[0+offset:taille_message+offset] return None if __name__ == "__main__": data = b'' while(1): nb_read = ser.in_waiting offset = 0 valid_offset = 0 if nb_read > 0: data+= ser.read(nb_read) while offset > -1: offset = data.find(b'\xFF\xFF', offset) if(offset > -1): message_brut = data[offset:] message = check_message(data, offset) if message is not None: print(message) valid_offset = offset offset = offset + 1 data = data[valid_offset:]