// Librairie utilisée : DHT sensor library (https://github.com/adafruit/DHT-sensor-library)
#include <DHT.h>
#define brocheDeBranchementDHT 6 // La ligne de communication du DHT22 sera donc branchée sur la pin D6 de l'Arduino
#define typeDeDHT DHT22 // Ici, le type de DHT utilisé est un DHT22 (que vous pouvez changer en DHT11, DHT21, ou autre, le cas échéant)
DHT dht(brocheDeBranchementDHT, typeDeDHT); //instanciation de la librairie DHT
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // lcd = afficheur 16C 2L à l'adresse 0x27
float temperatureEnCelsius ;
float sommeTemperature = 0; // initialyse la variable pour tendance température a 0
float sommeHumide = 0; // initialyse la variable pour tendance humidité a 0
float T1 = 0; // initialyse la variable mémoire (température) du total de la boucle for i a 0
float H1 = 0; // initialyse la variable mémoire (humidité) du total de la boucle for i a 0
float T2 = 20; // température de référence pour tendance au début
float H2 = 50; // humiditée de référence pour tendance au début
float temperatureMini = 100;
float temperatureMaxi = -100;
int minimax; //lecture bouton mini_maxi
int raz; //lecture boton raz
// création dessin des caractères spéciaux
byte Dcelsius[8] = { B11000, B11000, B00000, B00111, B01000, B01000, B01001, B00110 }; // caractère degré celsius
byte Dhaut[8] = { B00111, B00011, B00101, B01000, B10000, B00000, B00000, B00000 }; // caractère flêche haut
byte Dbas[8] = { B00000, B00000, B00000, B10000, B01000, B00101, B00011, B00111 }; // caractère flêche bas
byte Ddroite[8] = { B00000, B00100, B00110, B11111, B00110, B00100, B00000, B00000 }; // caractère flêche à droite
void setup() {
pinMode(3, INPUT_PULLUP); //PIN controle mini_maxi
pinMode(2, INPUT_PULLUP); //PIN_controle RAZ mini_maxi
// initialisation des caractères spéciaux (maximum 8 )
lcd.createChar(0, Dcelsius);
lcd.createChar(1, Dhaut);
lcd.createChar(2, Dbas);
lcd.createChar(3, Ddroite);
dht.begin(); // Initialisation du DHT22
lcd.init(); // initialiation du LCD
lcd.backlight(); // allume le rétro-éclairage
// texte de présentation
lcd.setCursor(1, 0);
lcd.print("Meteo Montauban");
delay(1000);
lcd.setCursor(4, 1);
lcd.print("par F1FRH");
delay(3000);
lcd.clear();
}
// =================
// Boucle principale
// =================
void loop() {
for (int i = 1; i < 31; i++) {
minimax = digitalRead(3); // lecture bouton mini_maxi
if (minimax == 0) { minimaxi(); } // si bouton sur ON, appel de la fonction "minimaxi()" affichage des températures mini et maxi
raz = digitalRead(2); // lecture du bouton raz
if(raz ==0) { remiseRaz();} // si bouton sur ON, appel de la fonction "raz()"
// Lecture des données
float tauxHumidite = dht.readHumidity(); // Lecture du taux d'humidité (en %)
float temperatureEnCelsius = dht.readTemperature(); // Lecture de la température, exprimée en degrés Celsius
sommeTemperature = sommeTemperature + temperatureEnCelsius; // aditionne les températures lues pedant la durée de la boucle
sommeHumide = sommeHumide + tauxHumidite; // aditionne les taux d'humiditée lues pedant la durée de la boucle
// TEST MINI_MAXI
if (temperatureMini > temperatureEnCelsius) {
temperatureMini = temperatureEnCelsius;
}
if (temperatureMaxi < temperatureEnCelsius) {
temperatureMaxi = temperatureEnCelsius;
}
//affichage des valeurs sur le LCD
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.setCursor(6, 0);
lcd.print(temperatureEnCelsius);
lcd.setCursor(12, 0);
lcd.print((char)0);
lcd.setCursor(0, 1);
lcd.print("Humi:");
lcd.setCursor(6, 1);
lcd.print(tauxHumidite);
lcd.setCursor(12, 1);
lcd.print("%");
// Temporisation de 2 secondes (pour rappel : il ne faut pas essayer de faire plus d'1 lecture toutes les 2 secondes, avec le DHT22, selon le fabricant)
delay(2000);
} // fin de boucle
// tendance température
T1 = sommeTemperature; // transfer de "sommeTemperature" dans la variable T1
if (T1 > T2) {
lcd.setCursor(14, 0);
lcd.print(" ");
lcd.print((char)1);
}
if (T1 < T2) {
lcd.setCursor(14, 0);
lcd.print(" ");
lcd.print((char)2);
}
if (T1 == T2) {
lcd.setCursor(14, 0);
lcd.print(" ");
lcd.print((char)3);
}
T2 = T1; // transfer de T1 dans T2 pour comparaison a la boucle suivante
T1 = 0; // remise a 0 de T1
H1 = sommeHumide;
// tendance humiditée
if (H1 > H2) {
lcd.setCursor(14, 1);
lcd.print(" ");
lcd.print((char)1);
}
if (H1 < H2) {
lcd.setCursor(14, 1);
lcd.print(" ");
lcd.print((char)2);
}
if (H1 == H2) {
lcd.setCursor(14, 1);
lcd.print(" ");
lcd.print((char)3);
}
H2 = H1; // transfer de H1 dans H2 pour comparaison a la boucle suivante
H1 = 0; // remise a 0 de H1
sommeTemperature = 0;
sommeHumide = 0;
}
void minimaxi() { // affiche les températures mini et maxi
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T mini:");
lcd.setCursor(7, 0);
lcd.print(temperatureMini);
lcd.setCursor(13, 0);
lcd.print((char)0);
lcd.setCursor(0, 1);
lcd.print("T maxi:");
lcd.setCursor(7, 1);
lcd.print(temperatureMaxi);
lcd.setCursor(13, 1);
lcd.print((char)0);
delay(7000);
lcd.clear();
}
void remiseRaz(){ // remise a zer0 et affichage des températures mini et maxi
temperatureEnCelsius=temperatureMini;
temperatureMaxi=temperatureEnCelsius;
minimaxi();}