#include <Arduino.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display1(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_SSD1306 display2(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define DISPLAY_ALTERNATE_INTERVAL_MS 10000
#define DISPLAY_UPDATE_INTERVAL_MS 500
enum HomeScreenState {
HOME_SCREEN_PUMP_INFO,
HOME_SCREEN_LEVEL_INFO
};
HomeScreenState currentScreenState = HOME_SCREEN_PUMP_INFO;
unsigned long lastDisplayChangeTime = 0;
unsigned long lastDisplayUpdateTime = 0;
int distance = 150;
int niveau = 60;
String etatCuve = "Cuve Moyennement Remplie";
String etatPompe = "ON";
String mode = "Auto";
String alarme = "Aucune";
void setup() {
Serial.begin(9600);
if (!display1.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Échec de l'initialisation de l'écran 1 SSD1306"));
for (;;);
}
if (!display2.begin(SSD1306_SWITCHCAPVCC, 0x3D)) {
Serial.println(F("Échec de l'initialisation de l'écran 2 SSD1306"));
for (;;);
}
display1.clearDisplay();
display1.display();
display2.clearDisplay();
display2.display();
drawPumpInfoScreenLayout();
updatePumpInfoContent();
}
void loop() {
unsigned long currentTime = millis();
if ((currentTime - lastDisplayChangeTime) >= DISPLAY_ALTERNATE_INTERVAL_MS) {
if (currentScreenState == HOME_SCREEN_PUMP_INFO) {
currentScreenState = HOME_SCREEN_LEVEL_INFO;
drawLevelInfoScreenLayout();
updateLevelInfoContent();
} else {
currentScreenState = HOME_SCREEN_PUMP_INFO;
drawPumpInfoScreenLayout();
updatePumpInfoContent();
}
lastDisplayChangeTime = currentTime;
lastDisplayUpdateTime = currentTime;
}
if ((currentTime - lastDisplayUpdateTime) >= DISPLAY_UPDATE_INTERVAL_MS) {
if (currentScreenState == HOME_SCREEN_PUMP_INFO) {
updatePumpInfoContent();
} else {
updateLevelInfoContent();
}
lastDisplayUpdateTime = currentTime;
}
}
void drawPumpInfoScreenLayout() {
display1.clearDisplay();
display1.setTextSize(1);
display1.setTextColor(SSD1306_WHITE);
display1.setCursor(0, 0);
display1.println("Infos Pompe:");
display1.display();
}
void updatePumpInfoContent() {
display1.fillRect(0, 10, SCREEN_WIDTH, SCREEN_HEIGHT - 10, SSD1306_BLACK);
display1.setTextSize(1);
display1.setTextColor(SSD1306_WHITE);
display1.setCursor(0, 10);
display1.print("Etat: ");
display1.println(etatPompe);
display1.print("Mode: ");
display1.println(mode);
display1.print("Alarme: ");
display1.println(alarme);
display1.display();
}
void drawLevelInfoScreenLayout() {
display2.clearDisplay();
display2.setTextSize(1);
display2.setTextColor(SSD1306_WHITE);
display2.setCursor(0, 0);
display2.println("Infos Niveau:");
display2.display();
}
void updateLevelInfoContent() {
display2.fillRect(0, 10, SCREEN_WIDTH, SCREEN_HEIGHT - 10, SSD1306_BLACK);
display2.setTextSize(1);
display2.setTextColor(SSD1306_WHITE);
display2.setCursor(0, 10);
display2.print("Distance: ");
display2.print(distance);
display2.println(" cm");
display2.print("Niveau: ");
display2.print(niveau);
display2.println(" %");
display2.print("Etat Cuve: ");
display2.println(etatCuve);
display2.display();
}