// OLED v2: https://wokwi.com/projects/383398998158150657
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Servo.h>
#include "oled.h"

#define ENCODER_CLK 2
#define ENCODER_DT  3

#define SERVO_PIN 9

oled displays;
Servo s;

int lastClk = HIGH;
int rotation;
int inc = 5;

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

  pinMode(ENCODER_CLK, INPUT);
  pinMode(ENCODER_DT, INPUT);

  s.attach(SERVO_PIN);
  s.write(0);

  displays.run();
  displays.setText(0, 0, 2, SSD1306_WHITE);
  displays.printText(String("Uhel: ") + rotation);
}

void loop() {
  int newClk = digitalRead(ENCODER_CLK);

  if (newClk != lastClk) {
    // There was a change on the CLK pin
    lastClk = newClk;
    int dtValue = digitalRead(ENCODER_DT);
    
    if (newClk == LOW && dtValue == HIGH)
    {
      rotation += inc;
    }
    else if (newClk == LOW && dtValue == LOW)
    {
      rotation -= inc;
    }

    if (rotation > 180)
    {
      rotation = 0;
    }
    else if (rotation < 0)
    {
      rotation = 180;
    }

    s.write(rotation);

    displays.setText(0, 0, 2, SSD1306_WHITE);
    displays.printText(String("Uhel: ") + rotation);
  }
}