#include <Arduino.h>
#include <U8g2lib.h>
// Crea un oggetto u8g2 per il tuo display OLED
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
// Definisci una variabile che rappresenta il livello del liquido nel bicchiere
int livello = 0;
void drawGlass(int posX, int posY, int dimX, int dimY, int percentage){
// Disegna il contorno del bicchiere
u8g2.setDrawColor(1);
u8g2.drawRFrame(posX, posY, dimX, dimY, 6);
u8g2.drawRFrame(posX+1, posY+1, dimX-2, dimY-2, 4);
//prima barra
u8g2.setDrawColor(1);
u8g2.drawRBox(posX + 3, posY, dimX - 6, dimY - 3, 3);
//Cancella extra pixel sul lato superiore
u8g2.setDrawColor(0);
u8g2.drawBox(posX, posY, dimX, 2);
//Aggiunge due segmenti superiori ai lati del bicchiere
u8g2.setDrawColor(1);
u8g2.drawBox(posX, posY, 2, 4);
u8g2.drawBox(posX+dimX-2, posY, 2, 4);
u8g2.setDrawColor(0);
u8g2.drawBox(posX+2, posY, 1, 4);
u8g2.drawBox(posX+dimX-3, posY, 1, 4);
// Barra nera
int percentageBar = 0;
if (percentage >= 0 & percentage <= 100) {
percentageBar = map(percentage, 0, 100, 0 /*posY + 4*/ , dimY - 5);
}
u8g2.setDrawColor(0);
u8g2.drawBox(posX + 3, posY + 2, dimX - 6, (dimY - 5) - percentageBar);
// Testo
char charBuf[5];
String strPercentage;
if (percentage >= 0 & percentage <= 100) {
strPercentage = String(percentage);
strPercentage = strPercentage + "%";
}
else {
strPercentage = "Err";
}
strPercentage.toCharArray(charBuf, 5);
u8g2.setFontMode(1);
u8g2.setFont(u8g2_font_NokiaLargeBold_tf);
u8g2.setDrawColor(2);
int posTextX=11;
if (percentage == 100) {
posTextX = 14;
}
else if (percentage < 10) {
posTextX=8;
}
u8g2.drawStr(posX+(dimX/2)-posTextX, posY+(dimY/2)+7, charBuf);
u8g2.setDrawColor(1);
}
void setup() {
// Inizializza il display
Serial.begin(9600);
u8g2.begin();
// Pulisci il buffer del display
u8g2.clearBuffer();
}
void loop() {
// Aggiorna il livello in modo sequenziale
//livello = random(0, 100);
u8g2.setFont(u8g2_font_6x10_mf);
u8g2.drawStr(0,8,"Chiare");
u8g2.drawStr(45,8,"Grigie");
u8g2.drawStr(98,8,"Nere");
//u8g2.sendBuffer();
for(int livello = 0;livello < 103; livello++){
//drawGlass(posX, posY, dimX, dimY, percentage)
drawGlass(0, 10, 38, 35, livello); //chiare
drawGlass(45, 10, 38, 35, livello); //grigie
drawGlass(90, 10, 38, 35, livello); //nere
// Invia il buffer al display
u8g2.sendBuffer();
delay(200);
}
}