#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSansBold9pt7b.h>
#include <Fonts/Picopixel.h>
#define ENCODER_CLK 22
#define ENCODER_DT 23
#define ENCODER_SW 14
int mesafe = 0;
int HIZ = 0;
uint8_t ivme = 0;
uint8_t mikro = 0;
//int imesafe = 0;
typedef enum {
AYR_MESAFE,
AYR_HIZ,
AYR_IVME,
AYR_MIKRO,
} MOD;
MOD Mod = AYR_MESAFE;
Adafruit_SSD1306 OLED(128, 64, &Wire, -1);
void sonrakiMod() {
switch (Mod) {
case AYR_MESAFE:
Mod = AYR_HIZ;
break;
case AYR_HIZ:
Mod = AYR_IVME;
break;
case AYR_IVME:
Mod = AYR_MIKRO;
break;
case AYR_MIKRO:
Mod = AYR_MESAFE;
break;
}
}
//-----------------------------------------------------------------
void GUNCELLE_DEGER(int carpan) {
switch (Mod) {
case AYR_MESAFE:
mesafe = constrain(mesafe + carpan, 0, 80);
// imesafe = map(mesafe,0,80, 0, 360);
break;
case AYR_HIZ:
HIZ = constrain(HIZ + carpan, 0, 80);
break;
case AYR_IVME:
ivme = constrain(ivme + carpan, 0, 80);
break;
case AYR_MIKRO:
mikro = constrain(mikro + carpan, 0, 80);
break;
}
}
//-------------------------------------------------------------------------
void GUNCELLE_OLED() {
OLED.clearDisplay();
OLED.setFont();
OLED.setTextColor(1);
OLED.setCursor(6, 2); OLED.print("MSF");
OLED.drawRoundRect(24, 2, 82, 7, 2, WHITE);
OLED.fillRect(25, 3, mesafe, 5, WHITE);
OLED.setCursor(110, 2); OLED.print(mesafe*4.5);
if (Mod == AYR_MESAFE) {
OLED.setCursor(0, 2); OLED.print(">");
}
OLED.setCursor(6, 12); OLED.print("HIZ");
OLED.drawRoundRect(24, 12, 82, 7, 2, WHITE);
OLED.fillRect(25, 13,HIZ, 5, WHITE);
OLED.setCursor(110, 12); OLED.print(HIZ);
if (Mod == AYR_HIZ) {
OLED.setCursor(0, 12); OLED.print(">");
}
OLED.setCursor(6, 22); OLED.print("ivm");
OLED.drawRoundRect(24, 22, 82, 7, 2, WHITE);
OLED.fillRect(25, 23, ivme, 5, WHITE);
OLED.setCursor(110, 22); OLED.print(ivme);
if (Mod == AYR_IVME) {
OLED.setCursor(0, 22); OLED.print(">");
}
OLED.setCursor(6, 32); OLED.print("MKR");
OLED.drawRoundRect(24, 32, 82, 7, 2, WHITE);
OLED.fillRect(25, 33, mikro, 5, WHITE);
OLED.setCursor(110, 32); OLED.print(mikro);
if (Mod == AYR_MIKRO) {
OLED.setCursor(0, 32); OLED.print(">");
}
Serial.print("mesafe=");Serial.print(mesafe*4.5);
Serial.print(" HIZ=");Serial.print(HIZ);
Serial.print(" ivme=");Serial.print(ivme);
Serial.print(" mikro=");Serial.println(mikro);
OLED.display();
}
//--------------------------------------------------------------
void setup() {
OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C);
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_SW, INPUT_PULLUP);
Serial.begin(115200);
GUNCELLE_OLED();
}
//---------------------------------------------------------------
long int SonDegisenMod = 0;
int eskiKlk = HIGH;
void loop() {
if (digitalRead(ENCODER_SW) == LOW && millis() - SonDegisenMod > 300) {
SonDegisenMod = millis();
sonrakiMod();
GUNCELLE_OLED();
}
int clk = digitalRead(ENCODER_CLK);
if (clk != eskiKlk && clk == LOW) {
int dt = digitalRead(ENCODER_DT);
int carpan = dt == HIGH ? 1 : -1;
GUNCELLE_DEGER(carpan);
GUNCELLE_OLED();
}
eskiKlk = clk;
}