#include <U8g2lib.h>
#include <Wire.h>
// Display
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);
// Menu items
const char* menuItems[] = {"Add", "Subtract", "Multiply", "Divide"};
const int menuLength = sizeof(menuItems) / sizeof(menuItems[0]);
int currentSelection = 0;
int formula = 0;
// Button pins
const int btnNext = 2; // Scroll through menu
const int btnSelect = 3; // Select current item
const int btn = 4;
bool lastBtnNextState = HIGH;
bool lastBtnSelectState = HIGH;
bool lastBtnState = HIGH;
void setup() {
u8g2.begin();
pinMode(btnNext, INPUT_PULLUP);
pinMode(btnSelect, INPUT_PULLUP);
pinMode(btn,INPUT);
}
void loop() {
// Read buttons (active LOW)
bool btnNextState = digitalRead(btnNext);
bool btnSelectState = digitalRead(btnSelect);
// Handle menu scroll
if (btnNextState == LOW && lastBtnNextState == HIGH) {
currentSelection = (currentSelection + 1) % menuLength;
delay(200); // Simple debounce
}
if (btnSelectState == LOW && lastBtnSelectState == HIGH) {
performOperation(currentSelection);
delay(500);
}
lastBtnNextState = btnNextState;
lastBtnSelectState = btnSelectState;
drawMenu();
}
void drawMenu() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_6x13_tr);
for (int i = 0; i < menuLength; i++) {
if (i == currentSelection) {
u8g2.drawStr(10, 15 + i * 12, ">");
}
u8g2.drawStr(20, 15 + i * 12, menuItems[i]);
}
u8g2.sendBuffer();
}
void performOperation(int index) {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
switch (index) {
case 0:
Add();
break;
case 1:
u8g2.drawStr(20, 30, "Subtraction Selected");
break;
case 2:
u8g2.drawStr(20, 30, "Multiplication Selected");
break;
case 3:
u8g2.drawStr(20, 30, "Division Selected");
break;
}
u8g2.sendBuffer();
delay(1000); // Pause to display message
}
void Add(){
const int btnVal = digitalRead(btn);
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.drawStr(20, 30, "Addition Selected");
bool btnState = digitalRead(btn);
if (btnState == LOW && lastBtnState == HIGH) {
formula++;
delay(200); // debounce
}
lastBtnState = btnState;
char buf[10];
sprintf(buf, "Total: %d", formula);
u8g2.drawStr(10, 40, buf);
u8g2.sendBuffer();
}