#define WOKWI
#include "Streaming.h"
#include <Adafruit_NeoPixel.h>
#define CHAINE_MAX_CHAR_LCD1 20 + 1
#define CHAINE_MAX_CHAR_LCD2 6 + 1
#define CHAINE_MAX_CHAR_LCD3 4 + 1
char TexteLigne1[CHAINE_MAX_CHAR_LCD1];
/* char TexteTemperature[CHAINE_MAX_CHAR_LCD3]
char Texte6space1[CHAINE_MAX_CHAR_LCD2]
char Texte6space2[CHAINE_MAX_CHAR_LCD2] */
char TexteLigne2[CHAINE_MAX_CHAR_LCD1];
#define UART_VITESSE 9600
#define BOUNCE 5
//#define ON 1
//#define OFF 0
// EcranLCD
#define LCD_ADRESSE_I2C 0x27
#define LCD_NB_COLONNE 16
#define LCD_NB_LIGNE 2
#define LCD_POSITION_COLONNE_0 0
#define LCD_POSITION_COLONNE_1 1
#define LCD_POSITION_COLONNE_2 2
#define LCD_POSITION_COLONNE_3 3
#define LCD_POSITION_COLONNE_4 4
#define LCD_POSITION_COLONNE_5 5
#define LCD_POSITION_COLONNE_6 6
#define LCD_POSITION_COLONNE_7 7
#define LCD_POSITION_COLONNE_8 8
#define LCD_POSITION_COLONNE_9 9
#define LCD_POSITION_COLONNE_10 10
#define LCD_POSITION_COLONNE_11 11
#define LCD_POSITION_COLONNE_12 12
#define LCD_POSITION_COLONNE_13 13
#define LCD_POSITION_COLONNE_14 14
#define LCD_POSITION_COLONNE_15 15
#define LCD_LIGNE1 0
#define LCD_LIGNE2 1
// RGB LED Strip
#define PIN 4
#define NUMPIXELS 10
#define rouge 200
#define bleu 25
// Temperature/Humidité
#define MSG_DEBUT "Début du programme de test de la DHT22"
#define MSG_TEMPERATURE "Température = "
#define MSG_HUMIDITE ", Humidité = "
// Boutton
#define UN_PUSH_BOUTON 2
// Potentiometre
#define BROCHE_DU_SENSEUR A3
#define MIN_REFERENCE 19
#define MAX_REFERENCE 35
#define MIN_PALIER 1
#define MAX_PALIER 10
#ifdef WOKWI
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
LiquidCrystal_I2C ecranLCD(0x27, LCD_NB_COLONNE, LCD_NB_LIGNE);
DHT capteurTemperature(7, DHT22);
#define lireTemperature() readTemperature();
#define mesureHumidite() readHumidity();
#define NUMPIXELS 16
#define MIN_POT 0
#define MAX_POT 1023
#else
#include <stdio.h>
#include "rgb_lcd.h"
#include "SHT31.h"
rgb_lcd ecranLCD;
SHT31 capteurTemperature;
#define lireTemperature() getTemperature();
#define mesureHumidite() getHumidity();
#define NUMPIXELS 10
#define MIN_POT 1023
#define MAX_POT 0
#endif
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(UART_VITESSE);
pinMode(UN_PUSH_BOUTON, INPUT);
ecranLCD.begin(LCD_NB_COLONNE, LCD_NB_LIGNE);
pixels.begin(); // Initialiser le module
capteurTemperature.begin();
pixels.clear(); // Éteindre tous les pixels
pixels.setBrightness(255); // 0..255
}
void loop() {
bool boutonMode = true;
static unsigned int compteurBouton = 0;
if (digitalRead(UN_PUSH_BOUTON))
{
delay(BOUNCE);
while (digitalRead(UN_PUSH_BOUTON));
compteurBouton++;
delay(BOUNCE);
if (boutonMode == true)
{
boutonMode = false;
}
else
{
boutonMode = true;
}
}
if (UN_PUSH_BOUTON == 1)
{
compteurBouton++;
}
int valeurDuPotentiometre = analogRead(A3);
int valeurDeLaReference;
int valeurDuPalier;
if (compteurBouton % 2 == 0)
{
valeurDeLaReference = map(valeurDuPotentiometre, MIN_POT, MAX_POT, MIN_REFERENCE, MAX_REFERENCE);
snprintf(TexteLigne1, CHAINE_MAX_CHAR_LCD1,
"R:%02d* P:%02d T:%02d", valeurDeLaReference, valeurDuPalier, compteurBouton);
ecranLCD.setCursor(LCD_POSITION_COLONNE_0, LCD_LIGNE1);
ecranLCD.print(TexteLigne1);
}
else if (compteurBouton % 2 == 1)
{
valeurDuPalier = map(valeurDuPotentiometre, MIN_POT, MAX_POT, MIN_PALIER, MAX_PALIER);
snprintf(TexteLigne1, CHAINE_MAX_CHAR_LCD1,
"R:%02d P:%02d* T:%02d", valeurDeLaReference, valeurDuPalier, compteurBouton);
ecranLCD.setCursor(LCD_POSITION_COLONNE_0, LCD_LIGNE1);
ecranLCD.print(TexteLigne1);
}
// int valeurDeLaReference = map(valeurDuPotentiometre, MIN_POT, MAX_POT, MIN_REFERENCE, MAX_REFERENCE);
// int valeurDuPalier = map(valeurDuPotentiometre, MIN_POT, MAX_POT, MIN_PALIER, MAX_PALIER);
int temperature = capteurTemperature.lireTemperature();
static int NBbleu = NUMPIXELS;
int NBrouge = (temperature- valeurDeLaReference) - (valeurDuPalier / 10.0);
if (NBrouge < 0)
{
NBrouge = 0;
}
else if (NBrouge > NUMPIXELS)
{
NBrouge = NUMPIXELS;
}
NBbleu = NUMPIXELS - NBrouge;
for(int i = 0; i <= NUMPIXELS; i++)
{
if (i < NBbleu)
{
pixels.setPixelColor(i,pixels.Color(rouge,22,33)); // Configurer le pixel en rouge 200/255
pixels.show(); // Actualiser, sur le module, le pixel modifié.
}
else
{
pixels.setPixelColor(i,pixels.Color(bleu,50,150));
pixels.show();
}
}
snprintf(TexteLigne1, CHAINE_MAX_CHAR_LCD2,
"R:%02d P:%02d T:%02d", valeurDeLaReference, valeurDuPalier, compteurBouton);
ecranLCD.setCursor(LCD_POSITION_COLONNE_0, LCD_LIGNE1);
ecranLCD.print(TexteLigne1);
snprintf(TexteLigne2, CHAINE_MAX_CHAR_LCD2,
"BL : %02d RG : %02d ", NBrouge, NBbleu);
ecranLCD.setCursor(LCD_POSITION_COLONNE_0, LCD_LIGNE2);
ecranLCD.print(TexteLigne2);
}