Bonsoir, voici toutes les modifications apportées selon vos instructions, beaucoup de notes pour ma compréhension,
je vais travailler sur le delais de 5000 et les réglages de température et d'humidité pour avoir ce que je souhaite, Merci pour tout de A à Z, merci pour votre compréhension et votre patience, Cordialement.
#include <Wire.h> // Inclure les librairies
#include <DFR_Key.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
const byte humidityRelay = 18;
const byte heaterRelay = 19; // Modifier les (const int) en (const byte)
const byte DHTPIN = 2;
const byte nbColumns = 20;
const byte nbLines = 4; // Ici utilisé votre méthode mon adresse est 0,27 je laisse ainsi ?
LiquidCrystal_I2C lcd( 0x27, nbColumns, nbLines);
// Démarrage des valeurs après le démarrage, on doit pouvoir les changées
int temp = 12;
int hum = 80;
int readkey;
long int lastmillis; // ici je n'ai malheureusement pas compris avec Unsigned long ?
long int hours;
long int minutes; // je n'ai pas d'heures affiché sur le Lcd ?
long int seconds;
char l2c1;
char l2c2;
char l2c3;
DHT dht (DHTPIN, DHT22); // Type de capteur DHT22 (AM2023)
const byte humidityRelay = 18; // ← * J'ai changé les int en byte, mais c'est déjà fait au dessus
const byte heaterRelay = 19; // ← * je laisse les 2 (const byte) Ou je supprime ?
DFR_Key keypad(0); // Utilise 0 pour le tableau DFRobot et 1 pour le tableau Cytron (?)
// String keyString = ""; (Ne sert à rien le viré), c'est ok supprimé.
int localKey = 0;
int lcd_key = 0;
int adc_key_in = 0;
// Utilisation de (const) au lieu de (#define)
const byte btnRIGHT = 0;
const byte btnUP = 1;
const byte btnDOWN = 2;
const byte btnLEFT = 3;
const byte btnSELECT = 4;
const byte btnNONE = 5;
int read_LCD_buttons()
{
adc_key_in = analogRead(0);
if (adc_key_in > 1000) return btnNONE;
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 150) return btnUP;
if (adc_key_in < 300) return btnDOWN;
if (adc_key_in < 460) return btnLEFT;
if (adc_key_in < 690) return btnSELECT;
}
void setup()
{
pinMode(humidityRelay, OUTPUT);
pinMode(heaterRelay, OUTPUT);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Keith control")); // utilisé le macro F () dans tous les Print () du Lcd ou de Serial
lcd.setCursor(0, 1);
lcd.print(F("Select instr")); // utilisé le macro F ()
delay(2500);
Serial.begin(F(115200)); // Mettre le port série sur 115200 au lieu de 9600 + macro F ()
dht.begin();
delay(1000);
lcd.clear();
// Taux d'échantillonnage (par défaut 10ms)
keypad.setRate(10);
digitalWrite(humidityRelay, HIGH); // Relais Humidité actif
digitalWrite(heaterRelay, HIGH); // Relais Température actif
}
void loop()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(t) || isnan(h))
{
// Ne pas répété lcd.begin(1602) dans la loop car déjà présent dans setup (effacé)
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Capteur N/C!!")); // utilisé le macro F ()
delay(10000);
}
else
{
lcd_key = read_LCD_buttons(); // Affichage d'utilisation des boutons pour les réglages
switch (lcd_key) {
case btnLEFT:
{
temp = temp + 1; // Bouton LEFT augmente la température de +1 par appuie
break;
}
case btnRIGHT:
{
temp = temp - 1; // Bouton RIGHT diminue la température de -1 par appuie
break;
}
case btnUP:
{
hum = hum + 1; // Bouton UP augmente l'humidité de +1 par appuie
break;
}
case btnDOWN:
{
hum = hum - 1; // Bouton DOWN diminue l'humidité de -1 par appuie
break;
}
case btnSELECT: // Bouton SELECT pour la sélection
{
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Hum Up/Down +-1%")); // utilisé le macro F ()
lcd.setCursor(0, 1);
lcd.print(F("Temp L/R +-1")); // utilisé le macro F ()
lcd.print(F((char)223)); // ici pas sûr ?
lcd.print(F("C")); // utilisé le macro F ()
delay (5000);
break;
}
}
lcd.setCursor(0, 0);
lcd.print(F("Hum: ")); // utilisé le macro F () pour tous les lcd.print
lcd.print(F(h));
lcd.print(F("%"));
lcd.print(F("("));
lcd.print(F(hum));
lcd.print(F("%)"));
lcd.setCursor(0, 1);
lcd.print(F("Tem: "));
lcd.print(F(t));
lcd.print(F((char)223)); // pas sûr de moi
lcd.print(F("("));
lcd.print(F(temp));
lcd.print(F((char)223));
lcd.print(F(")"));
int H = 75 + 10; // Pour éviter les démarrages fréquents H = 75 + 10%
if (h < 85) digitalWrite(humidityRelay, LOW); // Si humidité inférieur à 85 Relais1 Fermé
else if (h >= H) digitalWrite(humidityRelay, HIGH); // Sinon si humidité supérieure a
H =75+10 relais1 ouvert
int T = 12 + 2 ; // Ajout Hystérésie de 2 - Température=12+2
if (t < 12 )
digitalWrite(heaterRelay, LOW); // Si température intérieure a 12 Relais2 Fermé
else if (t >= T)
digitalWrite(heaterRelay, HIGH); // Sinon si température supérieur a T Relais2 Ouvert
}
}