#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// #include <Adafruit_SH1106.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET 4
//Adafruit_SH1106 display(OLED_RESET);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define upButton 2
#define downButton 3
#define setButton 4
int selectedMenuItem = 0;
const int numMenuItems = 4;
const char *menuItems[numMenuItems] = {"Item 1", "Item 2", "Item 3", "Item 4"};
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x64)
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(setButton, INPUT_PULLUP);
display.clearDisplay(); // vymazání displeje
display.setTextSize(1);
display.setTextColor(WHITE);
display.display(); // aktualizace displeje
Serial.begin(9600);
}
void loop() {
display.clearDisplay();
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Select option:");
display.drawFastHLine(0,8,SCREEN_WIDTH,WHITE);
for (int i = 0; i < numMenuItems; i++) {
if (i == selectedMenuItem) {
display.setTextColor(BLACK, WHITE); // Invert colors for the selected item
} else {
display.setTextColor(WHITE);
}
display.setCursor(0, 18 + i * 8); // Začátek menu
display.println(menuItems[i]);
}
display.display();
// Handle button presses
if ((digitalRead(upButton) == LOW) & (selectedMenuItem>0)) {
selectedMenuItem = (selectedMenuItem + numMenuItems - 1) % numMenuItems;
delay(200); // Debounce
}
if ((digitalRead(downButton) == LOW) & (selectedMenuItem<numMenuItems-1)){
selectedMenuItem = (selectedMenuItem + 1) % numMenuItems;
delay(200); // Debounce
}
if (digitalRead(setButton) == LOW) {
Serial.println(selectedMenuItem);
// Do something based on the selected menu item
// For example, you can add switch-case statements here.
// switch (selectedMenuItem) {
// case 0:
// // Action for Item 1
// break;
// case 1:
// // Action for Item 2
// break;
// case 2:
// // Action for Item 3
// break;
// }
delay(200); // Debounce
}
}