#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define BUTTON_UP_PIN 2
#define BUTTON_DOWN_PIN 3
#define BUTTON_SELECT_PIN 4
int Screenpage = 0;
int menuIndex = 0;
String menuItems[3] = {"Option 1", "Option 2", "Option 3"};
void setup() {
pinMode(BUTTON_UP_PIN, INPUT_PULLUP);
pinMode(BUTTON_DOWN_PIN, INPUT_PULLUP);
pinMode(BUTTON_SELECT_PIN, INPUT_PULLUP);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Select an option:");
display.setCursor(0,8);
display.print(">");
for (int i = 0; i < 3; i++) {
display.setCursor(6,(i+1)*8);
display.print(menuItems[i]);
display.println();
}
display.display();
}
void loop() {
int buttonUpState = digitalRead(BUTTON_UP_PIN);
int buttonDownState = digitalRead(BUTTON_DOWN_PIN);
int buttonSelectState = digitalRead(BUTTON_SELECT_PIN);
if (Screenpage==0){
if (buttonUpState == LOW) {
if (menuIndex > 0) {
menuIndex--;
delay(100);
updateDisplay();
}
} else if (buttonDownState == LOW) {
if (menuIndex < 2) {
menuIndex++;
delay(100);
updateDisplay();
}
} else if (buttonSelectState == LOW ) {
Screenpage=1;
if (menuIndex ==0){
pages_one();
}
if (menuIndex ==1){
pages_second();
}
if (menuIndex ==2){
pages_one();
pages_second();
}
}
}
if (Screenpage==1){
buttonSelectState = digitalRead(BUTTON_SELECT_PIN);
if (buttonSelectState == LOW){
pages_three();
Screenpage=2;
}
}
if (Screenpage==2){
buttonSelectState = digitalRead(BUTTON_SELECT_PIN);
if (buttonSelectState == LOW){
display.clearDisplay();
display.setTextSize(3);
display.setCursor(32,32);
display.print("OK");
display.display();
delay(2000);
display.clearDisplay();
Screenpage=0;
updateDisplay();
}
}
}
void updateDisplay() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Select an option:");
for (int i = 0; i < 3; i++) {
if (i == menuIndex) {
display.print(">");
} else {
display.print(" ");
}
display.print(menuItems[i]);
display.println();
}
display.display();
}
void pages_one(){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print("Selected: ");
display.println(menuItems[menuIndex]);
display.display();
delay(1000);
}
void pages_second(){
display.clearDisplay();
for (int progress = 0; progress <= 100; progress++) {
// Calculate the width of the progress bar
int progressWidth = SCREEN_WIDTH * progress / 100;
// Draw the progress bar
display.drawRect(0, SCREEN_HEIGHT/2 - 4, SCREEN_WIDTH, 8, WHITE);
display.fillRect(0, SCREEN_HEIGHT/2 - 4, progressWidth, 8, WHITE);
// Draw the progress text
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(SCREEN_WIDTH/2 - 10, SCREEN_HEIGHT/2 - 15);
display.print(progress);
display.print("%");
// Update the display
display.display();
// Wait for some time before updating the progress
delay(50);
}
}
void pages_three(){
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Back to Menu");
display.println("YES");
display.println("No");
display.display();
delay(1000);
}