#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;

int counter = 0;
int lastStateA;
int lastButtonState = HIGH;

int currentMenu = -1;
const int numMenus = 6;

unsigned long now = 0;

void setup() {
  Serial.begin(115200);

  pinMode(pinA, INPUT);
  pinMode(pinB, INPUT);
  pinMode(pinButton, INPUT_PULLUP);

  lastStateA = digitalRead(pinA);

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  delay(500);
  cover();
  delay(2000);
}

void loop() {
  bool currentStateA = digitalRead(pinA);
  bool currentStateB = digitalRead(pinB);

  if (currentStateA > lastStateA) {
    if (currentStateB != currentStateA) {
      counter++;  // Putaran searah jarum jam
    } else {
      counter--;  // Putaran berlawanan arah jarum jam
    }

    if (counter > 0) {
      currentMenu = (currentMenu + 1) % numMenus;  //ke menu berikutnya
    } else {
      currentMenu = (currentMenu - 1 + numMenus) % numMenus;  //ke menu sebelumnya
    }

    menu(currentMenu);
    Serial.print(counter);
    Serial.print(" , ");
    Serial.println(currentMenu);
    counter = 0;

  }
  lastStateA = currentStateA;
}

void cover() {
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  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 menu(int num) {
  switch (num) {
    case 0:
      display.clearDisplay();
      display.setTextColor(WHITE);
      display.setCursor(0, 0);
      display.setTextSize(2);
      display.println("Select:");
      display.setTextSize(2);
      display.println("menu 1 <-");
      display.setTextSize(1);
      display.println("menu 2");
      display.setTextSize(1);
      display.println("menu 3");
      display.display();
      break;
    case 1:
      display.clearDisplay();
      display.setTextColor(WHITE);
      display.setCursor(0, 0);
      display.setTextSize(2);
      display.println("Select:");
      display.setTextSize(1);
      display.println("menu 1");
      display.setTextSize(2);
      display.println("menu 2 <-");
      display.setTextSize(1);
      display.println("menu 3");
      display.display();
      break;
    case 2:
      display.clearDisplay();
      display.setTextColor(WHITE);
      display.setCursor(0, 0);
      display.setTextSize(2);
      display.println("Select:");
      display.setTextSize(1);
      display.println("menu 1");
      display.setTextSize(1);
      display.println("menu 2");
      display.setTextSize(2);
      display.println("menu 3 <-");
      display.display();
      break;
    case 3:
      display.clearDisplay();
      display.setTextColor(WHITE);
      display.setCursor(0, 0);
      display.setTextSize(2);
      display.println("Select:");
      display.setTextSize(2);
      display.println("menu 4 <-");
      display.setTextSize(1);
      display.println("menu 5");
      display.setTextSize(1);
      display.println("menu 6");
      display.display();
      break;
    case 4:
      display.clearDisplay();
      display.setTextColor(WHITE);
      display.setCursor(0, 0);
      display.setTextSize(2);
      display.println("Select:");
      display.setTextSize(1);
      display.println("menu 4");
      display.setTextSize(2);
      display.println("menu 5 <-");
      display.setTextSize(1);
      display.println("menu 6");
      display.display();
      break;
    case 5:
      display.clearDisplay();
      display.setTextColor(WHITE);
      display.setCursor(0, 0);
      display.setTextSize(2);
      display.println("Select:");
      display.setTextSize(1);
      display.println("menu 4");
      display.setTextSize(1);
      display.println("menu 5");
      display.setTextSize(2);
      display.println("menu 6 <-");
      display.display();
      break;

  }
}