#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const int pinA = 35;
const int pinB = 34;
const int pinButton = 32;
bool enRead = LOW;
bool click = LOW;
unsigned long time_now = 0;
int currentMenu = -1;
const int numMenus = 6;
const String menu[numMenus] = {"menu 1", "menu 2", "menu 3", "menu 4", "menu 5", "menu 6"};
void encoderRead() {
bool currentStateA = digitalRead(pinA);
bool currentStateB = digitalRead(pinB);
if (currentStateB != currentStateA) {
currentMenu = (currentMenu + 1) % numMenus; //ke menu berikutnya
} else {
currentMenu = (currentMenu - 1 + numMenus) % numMenus; //ke menu sebelumnya
}
enRead = HIGH;
Serial.println(currentMenu);
}
void buttonClick() {
click = HIGH;
}
void setup() {
Serial.begin(115200);
pinMode(pinA, INPUT);
pinMode(pinB, INPUT);
pinMode(pinButton, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(pinA), encoderRead, RISING);
attachInterrupt(digitalPinToInterrupt(pinButton), buttonClick, FALLING);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
delay(500);
display.clearDisplay();
display.setTextColor(WHITE);
cover();
}
void loop() {
if (enRead == HIGH) {
scrollMenu (currentMenu);
enRead = LOW;
}
if (click == HIGH) {
select(currentMenu);
click = LOW;
}
}
void cover() {
display.clearDisplay();
display.setTextSize(2);
display.setCursor(12, 3);
display.println("MENU LIST");
display.setTextSize(1);
display.setCursor(59, 30);
display.println("by");
display.setCursor(15, 40);
display.println("Alditya - 492752");
display.display();
}
void scrollMenu(int num) {
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(2);
display.println("Select:");
switch (num) {
case 0:
display.setTextSize(2);
display.println(menu[0] + " <-");
display.setTextSize(1);
display.println(menu[1]);
display.setTextSize(1);
display.println(menu[2]);
break;
case 1:
display.setTextSize(1);
display.println(menu[0]);
display.setTextSize(2);
display.println(menu[1] + " <-");
display.setTextSize(1);
display.println(menu[2]);
break;
case 2:
display.setTextSize(1);
display.println(menu[0]);
display.setTextSize(1);
display.println(menu[1]);
display.setTextSize(2);
display.println(menu[2] + " <-");
break;
case 3:
display.setTextSize(2);
display.println(menu[3] + " <-");
display.setTextSize(1);
display.println(menu[4]);
display.setTextSize(1);
display.println(menu[5]);
break;
case 4:
display.setTextSize(1);
display.println(menu[3]);
display.setTextSize(2);
display.println(menu[4] + " <-");
display.setTextSize(1);
display.println(menu[5]);
break;
case 5:
display.setTextSize(1);
display.println(menu[3]);
display.setTextSize(1);
display.println(menu[4]);
display.setTextSize(2);
display.println(menu[5] + " <-");
break;
default:
Serial.println("error");
display.println("error");
break;
}
display.display();
}
void select(int numSelect) {
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(2);
display.println("Selected:");
display.println(menu[numSelect]);
// switch (numSelect) {
// case 0:
// display.println(menu1);
// break;
// case 1:
// display.println(menu2);
// break;
// case 2:
// display.println(menu3);
// break;
// case 3:
// display.println(menu4);
// break;
// case 4:
// display.println(menu5);
// break;
// case 5:
// display.println(menu6);
// break;
// default:
// display.clearDisplay();
// Serial.println("error: no menu selected");
// display.println("Please\nrotate\nthe knob!");
// break;
//}
display.display();
}