#include <U8glib.h>
#include <DHT.h>
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // Initialisation de l'écran SSD1306
#define DHTPIN 4 // Broche de données du capteur connectée à la broche 2
#define DHTTYPE DHT11 // Type de capteur
DHT dht(DHTPIN, DHTTYPE);
int Button1Pin = 5;
int Button2Pin = 6;
int LEDPin = 3;
int BuzzerPin = 7;
const char *unitsName = "Celcius"; // Déclaration d'une chaîne de caractères constante
boolean loading = false;
boolean screen1 = false;
boolean settings = false;
boolean unitsMenu = false;
boolean LEDMenu = false;
boolean SafetyMenu = false;
boolean SafetyTempMenu = true;
boolean isSafetyEnabled = false;
int safetyTemp;
int progress = 0;
int cursorCounter = 0;
boolean isButton1Pressed = false;
boolean isButton2Pressed = false;
void setup() {
// Initialisation de l'écran
dht.begin();
u8g.begin();
Serial.begin(9600);
pinMode(LEDPin, OUTPUT);
pinMode(BuzzerPin, OUTPUT);
pinMode(Button1Pin, INPUT); // declare push button as input
pinMode(Button2Pin, INPUT);
}
void loop() {
float temperature = dht.readTemperature(); // Lire la température en Celsius
if(loading == true){
if (progress < 118) {
progress++;
} else {
progress = 0;
loading = false;
screen1 = true;
u8g.firstPage();
do {
// Ne rien dessiner ici, effacer l'écran
} while ( u8g.nextPage() );
}
loadingScreen(progress);
}
if(screen1 == true){
if(unitsName == "Celcius"){
mainScreen(temperature);
}else if(unitsName == "Faraneit"){
mainScreen((temperature * 9/5) + 32);
}
//changer que pour ca check avec la température déféni dans le Safety Temp
if(isSafetyEnabled){
if(temperature >= safetyTemp){
digitalWrite(LEDPin, HIGH);
digitalWrite(BuzzerPin, HIGH);
delay(100);
digitalWrite(BuzzerPin, LOW);
}else{
digitalWrite(LEDPin, LOW);
digitalWrite(BuzzerPin, LOW);
}
}else{
digitalWrite(LEDPin, LOW);
}
}
if(settings == true){
settingsPage();
}
if(unitsMenu == true){
openUnitsMenu();
}
if(LEDMenu == true){
openLEDMenu();
}
if(SafetyMenu == true){
openSafetyMenu();
}
if(SafetyTempMenu == true){
openSafetyTempMenu();
}
}
void mainScreen(float temperature){
u8g.firstPage();
do {
char tempString[10]; // Tableau pour stocker la température sous forme de chaîne de caractères
dtostrf(temperature, 4, 1, tempString); // Convertir la température en chaîne avec 1 décimale
//afficher l'écran 1
u8g.drawCircle(64, 32, 30);
u8g.setFont(u8g_font_fub14);
u8g.drawStr(45, 32, tempString); // mettre la vraie température
u8g.setFont(u8g_font_6x13);
if(unitsName == "Celcius"){
u8g.drawStr(44, 47, unitsName);
}else if(unitsName == "Faraneit"){
u8g.drawStr(41, 47, unitsName);
}
int Button1Status = digitalRead(Button1Pin); // read input value
int Button2Status = digitalRead(Button2Pin); // read input value
if(Button1Status == HIGH && Button2Status == LOW){
if(isButton1Pressed == false){
screen1 = false;
settings = true;
isButton1Pressed = true;
}
}else if(Button2Status == HIGH && Button1Status == LOW){
if(isButton2Pressed == false){
isButton2Pressed = true;
}
}else{
isButton1Pressed = false;
isButton2Pressed = false;
}
} while ( u8g.nextPage() );
}
void settingsPage(){
settings = true;
u8g.firstPage();
do {
u8g.setFont(u8g_font_tpssb);
u8g.drawStr(5, 12, "X");
u8g.drawStr((128 - 45.5)/2, 10, "Settings");
u8g.setFont(u8g_font_profont12);
u8g.drawStr((128 - 22)/2, 25, "Units");
u8g.drawStr((128 - 12)/2, 37, "LED");
u8g.drawStr((128 - 25)/2, 49, "Safety");
u8g.drawStr((128 - 60)/2, 61, "Safety temp");
//event des boutons
int Button1Status = digitalRead(Button1Pin); // read input value
int Button2Status = digitalRead(Button2Pin); // read input value
if(Button1Status == HIGH && Button2Status == LOW){
if(isButton1Pressed == false){
cursorCounter++;
isButton1Pressed = true;
}
}else if(Button2Status == HIGH && Button1Status == LOW){
if(isButton2Pressed == false){
settingsMenuButtonAction(cursorCounter);
isButton2Pressed = true;
}
}else{
isButton1Pressed = false;
isButton2Pressed = false;
}
//tracer le cursor
createSettingsCursor();
} while ( u8g.nextPage() );
}
void createSettingsCursor(){
if(cursorCounter == 5){
cursorCounter = 0;
}
switch(cursorCounter){
case 0:
u8g.drawFrame(29, 15, 75, 13);
break;
case 1:
u8g.drawFrame(29, 27, 75, 13);
break;
case 2:
u8g.drawFrame(29, 39, 75, 13);
break;
case 3:
u8g.drawFrame(29, 51, 75, 13);
break;
case 4:
u8g.drawFrame(3, 0, 10, 15);
break;
default:break;
}
}
void settingsMenuButtonAction(int number){
switch(number){
case 0:
unitsMenu = true;
settings = false;
cursorCounter = 0;
break;
case 1:
LEDMenu = true;
settings = false;
cursorCounter = 0;
break;
case 2:
SafetyMenu = true;
settings = false;
cursorCounter = 0;
break;
case 3:
SafetyTempMenu = true;
settings = false;
cursorCounter = 0;
break;
case 4:
screen1 = true;
settings = false;
cursorCounter = 0;
break;
default:break;
}
}
void openUnitsMenu(){
u8g.firstPage();
do {
u8g.setFont(u8g_font_tpssb);
u8g.drawStr(5, 12, "X");
u8g.drawStr((128 - 45.5)/2, 10, " Units ");
u8g.setFont(u8g_font_7x14);
u8g.drawStr((128 - 45)/2, 30, "Celcius");
u8g.drawStr((128 - 55)/2, 45, "Faraneit");
//event des boutons
int Button1Status = digitalRead(Button1Pin); // read input value
int Button2Status = digitalRead(Button2Pin); // read input value
if(Button1Status == HIGH && Button2Status == LOW){
if(isButton1Pressed == false){
cursorCounter++;
isButton1Pressed = true;
}
}else if(Button2Status == HIGH && Button1Status == LOW){
if(isButton2Pressed == false){
UnitsMenuButtonAction(cursorCounter);
isButton2Pressed = true;
}
}else{
isButton1Pressed = false;
isButton2Pressed = false;
}
//tracer le cursor
createUnitsCursor();
} while ( u8g.nextPage() );
}
void createUnitsCursor(){
if(cursorCounter == 3){
cursorCounter = 0;
}
switch(cursorCounter){
case 0:
u8g.drawFrame(25, 18, 80, 15);
break;
case 1:
u8g.drawFrame(25, 33, 80, 15);
break;
case 2:
u8g.drawFrame(3, 0, 10, 15);
break;
default:break;
}
}
void UnitsMenuButtonAction(int number){
switch(number){
case 0:
unitsName = "Celcius";
break;
case 1:
unitsName = "Faraneit";
break;
case 2:
unitsMenu = false;
settings = true;
cursorCounter = 0;
break;
default:break;
}
}
void openLEDMenu(){
u8g.firstPage();
do {
u8g.setFont(u8g_font_tpssb);
u8g.drawStr(5, 12, "X");
u8g.drawStr((128 - 45.5)/2, 10, " LED ");
u8g.setFont(u8g_font_7x14);
u8g.drawStr((128 - 10)/2, 30, "ON");
u8g.drawStr((128 - 15)/2, 45, "OFF");
//event des boutons
int Button1Status = digitalRead(Button1Pin); // read input value
int Button2Status = digitalRead(Button2Pin); // read input value
if(Button1Status == HIGH && Button2Status == LOW){
if(isButton1Pressed == false){
cursorCounter++;
isButton1Pressed = true;
}
}else if(Button2Status == HIGH && Button1Status == LOW){
if(isButton2Pressed == false){
LEDMenuButtonAction(cursorCounter);
isButton2Pressed = true;
}
}else{
isButton1Pressed = false;
isButton2Pressed = false;
}
//tracer le cursor
createUnitsCursor();
} while ( u8g.nextPage() );
}
void createLEDCursor(){
if(cursorCounter == 3){
cursorCounter = 0;
}
switch(cursorCounter){
case 0:
u8g.drawFrame(25, 18, 80, 15);
break;
case 1:
u8g.drawFrame(25, 33, 80, 15);
break;
case 2:
u8g.drawFrame(3, 0, 10, 15);
break;
default:break;
}
}
void LEDMenuButtonAction(int number){
switch(number){
case 0:
Serial.println("ON");
digitalWrite(LEDPin, HIGH);
break;
case 1:
Serial.println("OFF");
digitalWrite(LEDPin, LOW);
break;
case 2:
LEDMenu = false;
settings = true;
cursorCounter = 0;
break;
default:break;
}
}
void openSafetyMenu(){
u8g.firstPage();
do {
u8g.setFont(u8g_font_tpssb);
u8g.drawStr(5, 12, "X");
u8g.drawStr((128 - 45.5)/2, 10, " Safety ");
u8g.setFont(u8g_font_7x14);
u8g.drawStr((128 - 10)/2, 30, "ON");
u8g.drawStr((128 - 15)/2, 45, "OFF");
//event des boutons
int Button1Status = digitalRead(Button1Pin); // read input value
int Button2Status = digitalRead(Button2Pin); // read input value
if(Button1Status == HIGH && Button2Status == LOW){
if(isButton1Pressed == false){
cursorCounter++;
isButton1Pressed = true;
}
}else if(Button2Status == HIGH && Button1Status == LOW){
if(isButton2Pressed == false){
SafetyMenuButtonAction(cursorCounter);
isButton2Pressed = true;
}
}else{
isButton1Pressed = false;
isButton2Pressed = false;
}
//tracer le cursor
createSafetyCursor();
} while ( u8g.nextPage() );
}
void createSafetyCursor(){
if(cursorCounter == 3){
cursorCounter = 0;
}
switch(cursorCounter){
case 0:
u8g.drawFrame(25, 18, 80, 15);
break;
case 1:
u8g.drawFrame(25, 33, 80, 15);
break;
case 2:
u8g.drawFrame(3, 0, 10, 15);
break;
default:break;
}
}
void SafetyMenuButtonAction(int number){
switch(number){
case 0:
Serial.println("ON");
isSafetyEnabled = true;
break;
case 1:
Serial.println("OFF");
isSafetyEnabled = false;
break;
case 2:
SafetyMenu = false;
settings = true;
cursorCounter = 0;
break;
default:break;
}
}
void openSafetyTempMenu(){
u8g.firstPage();
do {
u8g.setFont(u8g_font_tpssb);
u8g.drawStr(5, 12, "X");
u8g.drawStr((128 - 75)/2, 10, "Safety Temp");
u8g.setFont(u8g_font_7x14);
u8g.drawStr((128 - 55)/2, 30, "0");
u8g.drawStr((128 + 35)/2, 30, "10");
u8g.drawStr((128 - 62)/2, 45, "20");
u8g.drawStr((128 + 35)/2, 45, "30");
u8g.drawStr((128 - 62)/2, 60, "40");
u8g.drawStr((128 + 35)/2, 60, "50");
//event des boutons
int Button1Status = digitalRead(Button1Pin); // read input value
int Button2Status = digitalRead(Button2Pin); // read input value
if(Button1Status == HIGH && Button2Status == LOW){
if(isButton1Pressed == false){
cursorCounter++;
isButton1Pressed = true;
}
}else if(Button2Status == HIGH && Button1Status == LOW){
if(isButton2Pressed == false){
SafetyTempMenuButtonAction(cursorCounter);
isButton2Pressed = true;
}
}else{
isButton1Pressed = false;
isButton2Pressed = false;
}
//tracer le cursor
createSafetyTempCursor();
} while ( u8g.nextPage() );
}
void createSafetyTempCursor(){
if(cursorCounter == 7){
cursorCounter = 0;
}
switch(cursorCounter){
case 0:
u8g.drawFrame(25, 17.5, 28, 15);
break;
case 1:
u8g.drawFrame(74, 17.5, 28, 15);
break;
case 2:
u8g.drawFrame(25, 33, 28, 15);
break;
case 3:
u8g.drawFrame(74, 33, 28, 15);
break;
case 4:
u8g.drawFrame(25, 48.5, 28, 15);
break;
case 5:
u8g.drawFrame(74, 48.5, 28, 15);
break;
case 6:
u8g.drawFrame(3, 0, 10, 15);
break;
default:break;
}
}
void SafetyTempMenuButtonAction(int number){
switch(number){
case 0:
safetyTemp = 0;
break;
case 1:
safetyTemp = 10;
break;
case 2:
safetyTemp = 20;
break;
case 3:
safetyTemp = 30;
break;
case 4:
safetyTemp = 40;
break;
case 5:
safetyTemp = 50;
break;
case 6:
SafetyTempMenu = false;
settings = true;
cursorCounter = 0;
break;
default:break;
}
}
void loadingScreen(int prog){
u8g.firstPage();
do {
u8g.setFont(u8g_font_tpssb);
u8g.drawStr(25, 50, "Chargement..");
u8g.drawFrame(0, 10, 128, 20);
u8g.drawBox(5, 15, prog, 10);
} while ( u8g.nextPage() );
}