/*
Rotary Encoder volume control example
Usage: rotate the knob to control the value,
rotaryClick the knob to change between volume/bass/treble.
https://wokwi.com/projects/364281291131471873
Released under the MIT license.
Copyright (C) 2021, Uri Shaked.
*/
#include <EEPROM.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//#include <Fonts/FreeSansBold9pt7b.h> // 두 번 인클루드하면 오류 나는 라이브러리여서 주석 처리함.
//#include <Fonts/Picopixel.h> // 두 번 인클루드하면 오류 나는 라이브러리여서 주석 처리함.
#include "DisplayManager.hpp"
#include "RotaryMonitor.hpp";
#include "footswitchMonitor.hpp"
#include "ledController.hpp"
Adafruit_SSD1306 Display(128, 64, &Wire, -1);
HomeScreen hScreen(&Display);
RotaryMonitor* rotary ;
FootswitchMonitor* fs;
LedController* led;
void setup() {
Display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
hScreen.UpdateAndDisplay();
rotary = RotaryMonitor::GetInstance();
fs = FootswitchMonitor::GetInstance();
led = LedController::GetInstance();
//===================
}
void loop()
{
bool isRotaryUpdated = false;
bool rotaryRight = false;
bool rotaryLeft = false;
bool rotaryClick = false;
bool isFootswitchUpdated = false;
int footswitchNum = -1;
isRotaryUpdated = rotary->isUpdated(&rotaryRight, &rotaryLeft, &rotaryClick);
isFootswitchUpdated = fs->isPressed(&footswitchNum);
if (isRotaryUpdated)
{
if (rotaryRight == true)
{
hScreen.ControlLeft();
}
if (rotaryLeft == true)
{
hScreen.ControlRight();
}
if (rotaryClick == true)
{
hScreen.Click();
}
hScreen.UpdateAndDisplay();
}
if (isFootswitchUpdated)
{
Display.setCursor(32, 22);
Display.print(footswitchNum);
Display.display();
led->ToggleLed(footswitchNum);
}
}