#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// definisce il pin di ciascun pulsante
#define BUTTON_UP 7
#define BUTTON_DOWN 9
#define BUTTON_SELECT 8
// inizializza lo schermo OLED
Adafruit_SSD1306 display(128, 64, &Wire, -1);
// definisce le voci del menu
String menuItems[] = {"Voce 1", "Voce 2", "Voce 3", "Voce 4"};
// imposta l'indice della voce selezionata e il numero di voci totali
int selectedIndex = 0;
int totalItems = 4;
void setup() {
// inizializza la comunicazione con lo schermo OLED
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// inizializza il display OLED
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(0, 0);
display.println("Seleziona Voce:");
display.display();
// imposta le modalità di input dei pulsanti
pinMode(BUTTON_UP, INPUT_PULLUP);
pinMode(BUTTON_DOWN, INPUT_PULLUP);
pinMode(BUTTON_SELECT, INPUT_PULLUP);
}
void loop() {
// legge lo stato dei pulsanti
int buttonUpState = digitalRead(BUTTON_UP);
int buttonDownState = digitalRead(BUTTON_DOWN);
int buttonSelectState = digitalRead(BUTTON_SELECT);
// aggiorna l'indice della voce selezionata in base ai pulsanti premuti
if (buttonUpState == LOW) {
selectedIndex = (selectedIndex - 1 + totalItems) % totalItems;
} else if (buttonDownState == LOW) {
selectedIndex = (selectedIndex + 1) % totalItems;
}
// mostra le voci del menu sullo schermo OLED
display.clearDisplay();
display.setCursor(0, 0);
display.println("Seleziona Voce:");
for (int i = 0; i < totalItems; i++) {
if (i == selectedIndex) {
display.print(">");
} else {
display.print(" ");
}
display.println(menuItems[i]);
}
display.display();
// verifica se il pulsante di selezione è stato premuto
if (buttonSelectState == LOW) {
// esegui l'azione corrispondente alla voce selezionata
switch (selectedIndex) {
case 0:
// esegui azione per la voce 1
break;
case 1:
// esegui azione per la voce 2
break;
case 2:
// esegui azione per la voce 3
break;
case 3:
// esegui azione per la voce 4
break;
}
}
// attende 50 millisecondi prima di aggiornare lo stato dei pulsanti
delay(50);
}