// Debounce, reaguje na stisk klávesy ne držení
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 4
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"};
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 200;
bool upButtonState = HIGH;
bool downButtonState = HIGH;
bool setButtonState = HIGH;
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(setButton, INPUT_PULLUP);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.display();
Serial.begin(9600);
}
void loop() {
display.clearDisplay();
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Select option:");
display.drawFastHLine(0, 9, SCREEN_WIDTH, WHITE);
for (int i = 0; i < numMenuItems; i++) {
display.setCursor(6, 18 + i * 8);
// Check if this is the selected menu item and add ">" before it
if (i == selectedMenuItem) {
display.setCursor(0, 18 + i * 8);
display.print(">");
}
display.println(menuItems[i]);
}
display.display();
// Handle button presses with debounce
if (digitalRead(upButton) == LOW && upButtonState == HIGH) {
if ((millis() - lastDebounceTime) > debounceDelay) {
if (selectedMenuItem > 0) {
selectedMenuItem = (selectedMenuItem + numMenuItems - 1) % numMenuItems;
}
lastDebounceTime = millis();
}
upButtonState = LOW;
} else if (digitalRead(upButton) == HIGH) {
upButtonState = HIGH;
}
if (digitalRead(downButton) == LOW && downButtonState == HIGH) {
if ((millis() - lastDebounceTime) > debounceDelay) {
if (selectedMenuItem < numMenuItems - 1) {
selectedMenuItem = (selectedMenuItem + 1) % numMenuItems;
}
lastDebounceTime = millis();
}
downButtonState = LOW;
} else if (digitalRead(downButton) == HIGH) {
downButtonState = HIGH;
}
if (digitalRead(setButton) == LOW && setButtonState == HIGH) {
if ((millis() - lastDebounceTime) > debounceDelay) {
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;
// }
lastDebounceTime = millis();
}
setButtonState = LOW;
} else if (digitalRead(setButton) == HIGH) {
setButtonState = HIGH;
}
}