import serial
from window import Win
import serial.tools.list_ports
# Initialisation de la fenêtre principale
win = Win()
def list_com_ports():
"""Liste les ports COM connectés avec un fabricant STMicroelectronics."""
# Récupération de tous les ports COM disponibles
lst_ports = serial.tools.list_ports.comports()
lst_stm32_ports = []
for port in lst_ports:
# Filtrer les ports dont le fabricant est STMicroelectronics
if "STMicroelectronics" == port.manufacturer:
lst_stm32_ports.append(port.device)
return lst_stm32_ports
# Variables globales avec préfixe approprié
lst_tram = [0, 0] # Liste d'entiers pour stocker les trames
int_taille_echantillon = win.int_taille_echantillon # Taille de l'échantillon définie par la fenêtre graphique
try:
while True:
try:
# Initialisation de la communication série avec le premier port trouvé
ser = serial.Serial((list_com_ports())[0], 921600)
except:
pass
# Vérifier si le processus de traitement doit démarrer
if win.bool_start_and_stop:
if win.bool_emul:
# Générer des données simulées
str_data = win.gen_data()
else:
# Lire les données depuis le port série
str_data = ser.read(4 * int_taille_echantillon).hex()
if str_data != "":
# Afficher les données reçues pour débogage
print(str_data)
# Synchronisation des données en recherchant les marqueurs "ab" et "cd"
while str_data[:2] != "ab" and str_data[12:14] != "cd":
str_data = str_data[1:]
# Initialiser les valeurs maximales
lst_maxi = [0, 0]
for int_index in range(2, (int_taille_echantillon - 1) * 8, 8):
try:
# Calcul des valeurs maximales pour chaque canal
lst_maxi = [
max(lst_maxi[0], int(str_data[int_index:int_index + 2], 16)),
max(lst_maxi[1], int(str_data[int_index + 4:int_index + 6], 16))
]
except ValueError as e:
# Gestion des erreurs lors de l'analyse des données
print(f"Erreur lors de l'analyse des données : {e}")
# Mise à jour de l'interface avec les nouvelles valeurs
win.change_all_val_and_update(lst_maxi[0], lst_maxi[1])
# Mise à jour des tâches et de l'interface Tkinter
win.win.update_idletasks()
win.win.update()
except KeyboardInterrupt:
ser.close()