#include <Arduino.h>
#include <Bounce2.h>
#include <Wire.h>
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
// Pins
const int PIN_BTN_PLAY = 2;
const int PIN_BTN_NEXT = 3;
const int PIN_BTN_PREV = 4;
const int PIN_BTN_MENU = 5;
const int PIN_BTN_SCREEN = 6;
const int PIN_SLIDER = A0;
// Bounce objects
Bounce btnPlay = Bounce();
Bounce btnNext = Bounce();
Bounce btnPrev = Bounce();
Bounce btnMenu = Bounce();
Bounce btnScreen = Bounce();
const char* ultimoTasto = "In attesa...";
int ultimoVolume = -1;
// NEW: Variable to track if the screen is on or off
bool isScreenOn = true;
void setup() {
Serial.begin(9600);
u8g2.begin();
btnPlay.attach(PIN_BTN_PLAY, INPUT_PULLUP);
btnPlay.interval(10);
btnNext.attach(PIN_BTN_NEXT, INPUT_PULLUP);
btnNext.interval(10);
btnPrev.attach(PIN_BTN_PREV, INPUT_PULLUP);
btnPrev.interval(10);
btnMenu.attach(PIN_BTN_MENU, INPUT_PULLUP);
btnMenu.interval(10);
btnScreen.attach(PIN_BTN_SCREEN, INPUT_PULLUP);
btnScreen.interval(10);
aggiornaSchermo(0);
}
void loop() {
btnPlay.update();
btnNext.update();
btnPrev.update();
btnMenu.update();
btnScreen.update();
bool bisognaAggiornare = false;
// --- STANDARD BUTTONS ---
if (btnPlay.fell()) { ultimoTasto = "PLAY / PAUSE"; bisognaAggiornare = true; }
if (btnNext.fell()) { ultimoTasto = "NEXT TRACK"; bisognaAggiornare = true; }
if (btnPrev.fell()) { ultimoTasto = "PREV TRACK"; bisognaAggiornare = true; }
if (btnMenu.fell()) { ultimoTasto = "MENU"; bisognaAggiornare = true; }
// --- NEW: TOGGLE SCREEN BUTTON ---
if (btnScreen.fell()) {
isScreenOn = !isScreenOn; // Flip the boolean (True becomes False, False becomes True)
if (isScreenOn) {
u8g2.setPowerSave(0); // 0 = Wake up
ultimoTasto = "SCREEN WOKE UP";
} else {
u8g2.setPowerSave(1); // 1 = Go to sleep
ultimoTasto = "GOING TO SLEEP";
}
bisognaAggiornare = true;
}
// --- VOLUME SLIDER ---
int valoreGrezzo = analogRead(PIN_SLIDER);
int volumePercent = map(valoreGrezzo, 0, 1023, 0, 100);
if (volumePercent != ultimoVolume) {
ultimoVolume = volumePercent;
bisognaAggiornare = true;
}
// --- UPDATE OLED ---
// We only bother drawing the new graphics if the screen is actually ON
if (bisognaAggiornare && isScreenOn) {
aggiornaSchermo(ultimoVolume);
}
}
void aggiornaSchermo(int volume) {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.drawStr(0, 15, "Hai premuto:");
u8g2.setFont(u8g2_font_ncenB12_tr);
u8g2.drawStr(0, 35, ultimoTasto);
u8g2.drawFrame(0, 50, 128, 10);
int larghezzaBarra = map(volume, 0, 100, 0, 128);
u8g2.drawBox(0, 50, larghezzaBarra, 10);
u8g2.sendBuffer();
}