#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int buttonUp = 2;
const int buttonDown = 3;
const int buttonSelect = 4;
const int buttonBack = 5;
const int buzzerPin = 9; // Replace '6' with the actual pin number where the buzzer is connected
int menuIndex = 0;
String menuItems[] = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10"};
bool inMenu = true;
bool isBeeping = false;
void setup() {
pinMode(buttonUp, INPUT_PULLUP);
pinMode(buttonDown, INPUT_PULLUP);
pinMode(buttonSelect, INPUT_PULLUP);
pinMode(buttonBack, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT); // Set the buzzer pin as an output
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
updateMenu();
}
void loop() {
if (inMenu) {
if (digitalRead(buttonUp) == LOW) {
menuIndex--;
if (menuIndex < 0) {
menuIndex = sizeof(menuItems)/sizeof(menuItems[0]) - 1;
}
updateMenu();
beep(1000, 100); // Beep at 1000 Hz for 100 milliseconds (adjust duration as needed)
delay(200);
}
if (digitalRead(buttonDown) == LOW) {
menuIndex++;
if (menuIndex >= sizeof(menuItems)/sizeof(menuItems[0])) {
menuIndex = 0;
}
updateMenu();
beep(1000, 100); // Beep at 1000 Hz for 100 milliseconds (adjust duration as needed)
delay(200);
}
if (digitalRead(buttonSelect) == LOW) {
inMenu = false;
executeMenuItem(menuIndex);
beep(466, 100); // Beep at 500 Hz for 100 milliseconds (adjust duration as needed)
delay(200);
}
} else {
if (digitalRead(buttonBack) == LOW) {
inMenu = true;
updateMenu();
beep(466, 100); // Beep at 500 Hz for 100 milliseconds (adjust duration as needed)
delay(200);
}
}
}
void beep(int frequency, int duration) {
if (!isBeeping) { // Only start a new beep if there is no ongoing beep
isBeeping = true;
unsigned long startTime = millis();
int halfPeriod = 1000000 / (frequency * 2);
while (millis() - startTime < duration) {
digitalWrite(buzzerPin, HIGH);
delayMicroseconds(halfPeriod);
digitalWrite(buzzerPin, LOW);
delayMicroseconds(halfPeriod);
}
digitalWrite(buzzerPin, LOW); // Make sure the buzzer is off after the beep
isBeeping = false;
}
}
void updateMenu() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
int numItemsToShow = min(8, sizeof(menuItems) / sizeof(menuItems[0]));
// Calculate the starting index for displaying the menu items
int startIndex = 0;
if (menuIndex >= numItemsToShow - 1) {
startIndex = menuIndex - (numItemsToShow - 1);
}
for (int i = startIndex; i < startIndex + numItemsToShow; i++) {
if (i == menuIndex) {
display.print("> ");
} else {
display.print(" ");
}
display.println(menuItems[i]);
}
display.display();
}
void executeMenuItem(int itemIndex) {
// Check the selected menu item and call the corresponding function
switch (itemIndex) {
case 0:
item1Function();
break;
case 1:
item2Function();
break;
case 2:
item3Function();
break;
case 3:
item4Function();
break;
case 4:
item5Function();
break;
case 5:
item6Function();
break;
case 6:
item7Function();
break;
case 7:
item8Function();
break;
case 8:
item9Function();
break;
case 9:
item10Function();
break;
}
}
void item1Function() {
// Add code for Item1 here
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Selected: Item1");
display.display();
}
void item2Function() {
// Add code for Item2 here
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Selected: Item2");
display.display();
}
void item3Function() {
// Add code for Item3 here
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Selected: Item3");
display.display();
}
void item4Function() {
// Add code for Item4 here
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Selected: Item4");
display.display();
}
void item5Function() {
// Add code for Item5 here
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Selected: Item5");
display.display();
}
void item6Function() {
// Add code for Item6 here
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Selected: Item6");
display.display();
}
void item7Function() {
// Add code for Item7 here
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Selected: Item7");
display.display();
}
void item8Function() {
// Add code for Item8 here
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Selected: Item8");
display.display();
}
void item9Function() {
// Add code for Item9 here
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Selected: Item9");
display.display();
}
void item10Function() {
// Add code for Item10 here
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Selected: Item10");
display.display();
}
void buzzer(){
}