#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define BUTTON_UP 4
#define BUTTON_DOWN 2
#define BUTTON_SELECT 3
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
int currentMenuItem = 0;
const int totalMenuItems = 5; // Adjust this based on the number of menu items
void setup()
{
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
pinMode(BUTTON_UP, INPUT_PULLUP);
pinMode(BUTTON_DOWN, INPUT_PULLUP);
pinMode(BUTTON_SELECT, INPUT_PULLUP);
display.display();
delay(2000);
display.clearDisplay();
}
void loop()
{
handleButtons();
displayMenu();
}
void handleButtons() {
if (digitalRead(BUTTON_UP) == LOW) {
currentMenuItem = (currentMenuItem + 1) % totalMenuItems;
delay(200); // Button debounce
}
if (digitalRead(BUTTON_DOWN) == LOW) {
currentMenuItem = (currentMenuItem - 1 + totalMenuItems) % totalMenuItems;
delay(200); // Button debounce
}
if (digitalRead(BUTTON_SELECT) == LOW) {
// Perform action based on the selected menu item
switch (currentMenuItem) {
case 0:
// Action for menu item 1
break;
case 1:
// Action for menu item 2
break;
case 2:
// Action for menu item 3
break;
// Add more cases for additional menu items
}
delay(500); // Button debounce
}
}
void displayMenu() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
for (int i = 0; i < totalMenuItems; i++) {
if (i == currentMenuItem) {
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Highlight the selected item
} else {
display.setTextColor(SSD1306_WHITE);
}
display.print("Menu Item ");
display.println(i + 1);
}
display.display();
}