import machine
import ssd1306
import time
import dht

# Configuration de l'I2C pour l'écran OLED
i2c = machine.I2C(0, scl=machine.Pin(22), sda=machine.Pin(21))

# Initialisation de l'écran OLED SSD1306
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)

# Slide switch pour activer/désactiver le système
system_switch = machine.Pin(12, machine.Pin.IN, machine.Pin.PULL_UP)

# Boutons poussoirs (entrées) pour contrôler la lampe et le laser
push_laser = machine.Pin(26, machine.Pin.IN, machine.Pin.PULL_UP)  # Bouton pour laser
push_lampe = machine.Pin(33, machine.Pin.IN, machine.Pin.PULL_UP)  # Bouton pour lampe

# Configuration de la lampe et du laser
lampe = machine.Pin(32, machine.Pin.OUT)
laser = machine.Pin(25, machine.Pin.OUT)

# Capteur de température DHT22
dht_1 = dht.DHT22(machine.Pin(18))

# Fonction pour afficher du texte sur l'écran OLED
def afficher_texte(txt_1=".", txt_2=".", txt_3=".", txt_4="."):
    oled.fill(0)  # Efface l'écran
    oled.text(txt_1, 0, 0)    # Texte à la ligne 1
    oled.text(txt_2, 0, 16)   # Texte à la ligne 2
    oled.text(txt_3, 0, 32)   # Texte à la ligne 3
    oled.text(txt_4, 0, 48)   # Texte à la ligne 4
    oled.show()               # Affiche le texte

pause_global = 0.2    # Variable pour gérer le temps de pause

# Boucle principale
while True:
    try:
        # Vérification de l'état du slide switch pour activer/désactiver le système
        if system_switch.value() == 0:
            text_1 = "System: Actif"
            
            # Lecture du capteur de température et d'humidité
            dht_1.measure()
            temp = dht_1.temperature()
            humidity = dht_1.humidity()
            text_2 = "Temp. : {} C".format(temp)
            text_3 = "Humid. : {} %".format(humidity)
            
            # Contrôle de la lampe avec le bouton poussoir
            print("Lampe:", push_lampe.value())
            if push_lampe.value() == 0:
                lampe.value(0)
                text_4_1 = "Lampe:X"
            else:
                lampe.value(1)
                text_4_1 = "Lampe:O"

            # Contrôle du laser avec le bouton poussoir
            print("Lampe:", push_laser.value())
            if push_laser.value() == 0:
                laser.value(1)
                text_4_2 = "Laser:O"
            else:
                laser.value(0)
                text_4_2 = "Laser:X"
            
            text_4 = text_4_1 + " " + text_4_2

        else:
            text_1 = "System: Inactif"
            text_2, text_3, text_4 = "", "", ""
            lampe.value(0)
            laser.value(0)

        # Affichage sur l'écran OLED
        afficher_texte(text_1, text_2, text_3, text_4)

    except OSError as e:
        print("Erreur de lecture du capteur :", e)
        afficher_texte("Erreur capteur", "Lecture DHT22")
    
    # Pause d'une seconde entre les mesures
    time.sleep(pause_global)