# Créé par julie, le 17/09/2024 en Python 3.7
import serial
import matplotlib.pyplot as plt
import numpy as np
import time
from scipy.optimize import curve_fit
from matplotlib.widgets import Cursor  # Import pour le curseur interactif

# Fonction de charge du condensateur (modèle à ajuster)


# Configurer le port série
port =       # Change selon ton port série
baudrate = 9600
timeout = 2

try:
    # Ouvrir la connexion série
    serialport = serial.Serial(port, baudrate=baudrate, timeout=timeout)
    time.sleep(2)  # Attendre la connexion stable

    # Initialiser les listes pour stocker les données


    print("Lecture des données...")

    # Lire les données
    for _ in range(350):  # Lire 350 lignes
        line = serialport.readline().decode('ascii').strip()
        if line:
            try:
                # Extraire le temps et la tension de la ligne lue
                parts = line.split(', ')
                temps.append(float(parts[0].split(': ')[1].replace('s', '')))
                tensions.append(float(parts[1].split(': ')[1]))
            except (IndexError, ValueError) as e:
                print(f"Erreur de traitement de la ligne: {line}")

    # Fermer le port série après la lecture des données
    serialport.close()

    # Convertir les données en numpy arrays pour le traitement


    # Tracer les données expérimentales


    # Ajustement du modèle
    popt, pcov = curve_fit(fonc, temps, tensions)
    xfit = np.linspace(min(temps), max(temps), 1000)  # Points pour la courbe ajustée

    # Tracer la courbe ajustée


    # Afficher les résultats du fit sur le graphique
    plt.text(10, 2, r"$U_c(t) = %.2f(1 - \exp^{-t/%.2f})$" % (popt[0], popt[1]), fontsize=12)

    # Décorations du graphique


    # Ajouter un curseur interactif
    cursor = Cursor(plt.gca(), useblit=True, color='red', linewidth=1)

    # Afficher le graphique
    plt.show()

except serial.SerialException as e:
    print(f"Erreur de connexion au port série: {e}")
