#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>

#define DHTPIN 8 // Broche de connexion du capteur DHT22
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

LiquidCrystal_I2C lcd(0x27, 16, 4); // Adresse I2C de l'écran LCD

const int LDR_PIN = A0; // Broche de connexion du capteur de luminosité
const int LIGHT_THRESHOLD = 500; // Seuil de luminosité pour considérer que la lumière est allumée

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 4);
  lcd.backlight();

  // Initialise le capteur DHT
  dht.begin();
}

void loop() {
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  // Vérifie si la lecture du capteur est réussie
  if (!isnan(humidity) && !isnan(temperature)) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Piece: Chambre"); // Changez "Chambre" par le nom de la pièce

    lcd.setCursor(0, 1);
    lcd.print("Temp: ");
    lcd.print(temperature);
    lcd.print(" C ");
    lcd.setCursor(0, 2);
    lcd.print("Hum: ");
    lcd.print(humidity);
    lcd.print(" %");

    int lightValue = analogRead(LDR_PIN);
    lcd.setCursor(0, 3);
    lcd.print("Lumiere: ");
    if (lightValue > LIGHT_THRESHOLD) {
      lcd.print("Allumee");
    } else {
      lcd.print("Eteinte");
    }

    // Envoyer les données sur demande
    if (Serial.available() > 0) {
      char request = Serial.read();
      if (request == 'D') {
        Serial.print("D,");
        Serial.print("Chambre,"); // Changez "Chambre" par le nom de la pièce
        Serial.print(temperature);
        Serial.print(",");
        Serial.print(humidity);
        Serial.print(",");
        Serial.println(lightValue > LIGHT_THRESHOLD ? "Allumee" : "Eteinte");
      }
    }

    delay(1000); // Attendre 1 seconde entre les lectures
  } else {
    Serial.println("Erreur de lecture du capteur DHT");
  }
}