#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSansBold9pt7b.h>
#include <Fonts/Picopixel.h>

#define ENCODER_CLK 2
#define ENCODER_DT 3
#define ENCODER_SW 4

uint8_t volume = 50;
uint8_t bass = 25;
uint8_t treble = 66;

int counter = 0;

typedef enum {
  SET_VOLUME, 
  SET_BASS,
  SET_TREBLE,
}Mode;
Mode mode = SET_VOLUME;

Adafruit_SSD1306 display (128, 64, &Wire, -1);

void nextMode() {
  switch (mode){
    case SET_VOLUME:
    mode = SET_BASS;
    break;
    mode = SET_TREBLE;
    break;
  }
}

void setup()
{
  pinMode(ENCODER_CLK, INPUT);
  pinMode(ENCODER_DT, INPUT);
  pinMode(ENCODER_SW, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt (ENCODER_CLK), readEncoder, FALLING);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //ganti 0x3C dengan alamat IIC LCD kalian
  display.clearDisplay(); // mengosongkan tampilan / menghapus logo adafruit
}

void readEncoder(){
  int dtValue = digitalRead(ENCODER_DT);
  if (dtValue == HIGH){
    counter++;
  }
  if (dtValue == LOW){
    counter--;
  }
}

void loop() {  
  display.clearDisplay(); // mengosongkan tampilan
  display.setTextSize(1); // sett ukuran huruf
  display.setTextColor(WHITE); // set warna huruf
  display.setCursor(0,0); // sett posisi tampilan
  display.println("Coba Oled "); // mengisi karakter 

  display.setTextSize(2); // mengosongkan tampilan
  display.setTextColor(WHITE); // set warna huruf
  display.setCursor(14,14); // sett posisi tampilan
  display.print("Mode : "); // mengisi karakter
  display.print(counter); // mengisi karakter
  display.display(); // menampilkan karakter yang sudah disimpan

  delay(1000); // jeda 1000 miliseconds
}