from machine import Pin, ADC
import dht
import time

# Configuration Des broches

# Capteurs DHT 11
capteur1 = dht.DHT11(Pin(1))   # Connecté sur GP1
capteur2 = dht.DHT11(Pin(10))  # Connecté sur GP10

# Capteurs Fin de Course 
fde_bas = Pin(11, Pin.IN, Pin.PULL_UP)   # Capteur Début / Bas sur GP11
fde_haut = Pin(9, Pin.IN, Pin.PULL_UP)   # Capteur Fin / Haut sur GP9

# Capteur de Pression
capteur_pression = ADC(Pin(26)) # Connecté sur GP26 (ADC0)
V_S = 3.15                      # Tension de référence réelle (VS)
ADC_MAX = 65535

print("Système initialisé. Surveillance globale active...")
print("-" * 55)

# Variables pour gérer le timing des capteurs lents (DHT et Pression)
# Cela permet de lire les fins de course en continu sans bloquer le reste
dernier_clic_lent = 0
intervalle_lent = 500 # 500 millisecondes (0.5 seconde)
# Boucle Principale
while True:
    # Capteurs Fin de Course 
    if fde_bas.value() == 0:
        print("Alerte : Position Gauche atteinte ")
        time.sleep(0.2)  # Anti-rebond
        
    if fde_haut.value() == 0:
        print("Alerte : Position Droite atteinte ")
        time.sleep(0.2)  # Anti-rebond

    # Capteur de Pression et Capteurs DHT11
    temps_actuel = time.ticks_ms()
    
    if time.ticks_diff(temps_actuel, dernier_clic_lent) >= intervalle_lent:
        dernier_clic_lent = temps_actuel # Réinitialise le chronomètre
        print("\n--- MISE À JOUR DES MESURES ---")
        
        # Capteurs DHT11
        try:
            capteur1.measure()
            capteur2.measure()
            
            humi1 = capteur1.humidity()
            temp1 = capteur1.temperature()
            humi2 = capteur2.humidity()
            temp2 = capteur2.temperature()
            
            diff_humidite = abs(humi1 - humi2)
            diff_temperature = abs(temp1 - temp2)
            
            print(f"DHT 1 -> Temp: {temp1}°C | Humidité: {humi1}%")
            print(f"DHT 2 -> Temp: {temp2}°C | Humidité: {humi2}%")
            print(f"-> Écart Temp: {diff_temperature}°C | Écart Humidité: {diff_humidite}%")
            
        except OSError:
            print("Erreur de lecture sur l'un des capteurs DHT. Vérifiez les branchements.")
            
        # Capteur de Pression
        try:
            valeur_brute = capteur_pression.read_u16()
            v_out = (valeur_brute / ADC_MAX) * V_S
            pression_kpa = ((v_out / V_S) - 0.04) / 0.000901
            
            if pression_kpa < 0: 
                pression_kpa = 0.0
                
            pression_pa = pression_kpa * 1000
            print(f"Pression -> Vout: {v_out:.3f}V | {pression_kpa:.3f} kPa ({pression_pa:.1f} Pa)")
            
        except OSError:
            print("Erreur de lecture du capteur de pression.")
            
        print("-" * 40)

    # Petite pause
    time.sleep(0.01)