#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define widthScreen 128
#define heightScreen 64
#define resetPin -1
const int buttonSatu = 6;
const int buttonDua = 5;
const int buttonEnter = 4;
Adafruit_SSD1306 display(widthScreen, heightScreen, &Wire, resetPin);
int menu = 0;
int subMenu = 0;
bool inSubMenu = false;
unsigned long lastButtonPress = 0;
const unsigned long debounceDelay = 200;
void setup() {
Serial.begin(9600);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Oled gagal terkoneksi"));
for (;;);
}
pinMode(buttonSatu, INPUT_PULLUP);
pinMode(buttonDua, INPUT_PULLUP);
pinMode(buttonEnter, INPUT_PULLUP);
}
void loop() {
checkButtons();
if (inSubMenu) {
displaySubMenu();
} else {
mainMenu();
}
}
void checkButtons() {
unsigned long currentMillis = millis();
if (currentMillis - lastButtonPress >= debounceDelay) {
byte readButtonSatu = digitalRead(buttonSatu);
byte readButtonDua = digitalRead(buttonDua);
byte readButtonEnter = digitalRead(buttonEnter);
if (readButtonSatu == LOW) {
if (inSubMenu) {
inSubMenu = false;
} else {
menu++;
}
lastButtonPress = currentMillis;
}
if (readButtonDua == LOW) {
if (inSubMenu) {
inSubMenu = false;
} else {
menu++;
}
lastButtonPress = currentMillis;
}
if (readButtonEnter == LOW) {
if (!inSubMenu) {
inSubMenu = true;
subMenu = menu % 3;
}
lastButtonPress = currentMillis;
}
}
}
void mainMenu() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 2);
switch (menu % 3) {
case 0:
display.println("> Calculator");
display.println("Contact");
display.println("Setting");
break;
case 1:
display.println("Calculator");
display.println("> Contact");
display.println("Setting");
break;
case 2:
display.println("Calculator");
display.println("Contact");
display.println("> Setting");
break;
}
display.display();
}
void displaySubMenu() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 2);
switch (subMenu) {
case 0:
display.println("Calculator Menu");
break;
case 1:
display.println("Contact Menu");
break;
case 2:
display.println("Setting Menu");
break;
}
display.display();
}
Loading
ssd1306
ssd1306