#include <GyverOLED.h> // Библиотека дисплея
GyverOLED<SSD1306_128x64> oled(0x3c); // Обьект дисплея
#include <Wire.h> //Подключаем библиотеку для использования I2C интерфейса
#include <EncButton.h>
#define A 5
#define B 18
#define KEY 19
EncButton<EB_TICK, A, B, KEY> enc; // энкодер с кнопкой <A, B, KEY>
int PWM_LW_MIN = 0; //Если необходим ток покоя на LED - изменить эту константу
int PWM_LW_MAX = 250; //Если необходимо ограничить максимальную яркость - уменьшить значение
int ComHOn = 0;
int ComMOn = 0;
int RD = 0;
int ComHOff = 0;
int ComMOff = 0;
int ZD = 0;
int PD = 0;
int PN = 0;
int SD = 0;
int SN = 0;
int ScD = 250;
int ScN = 50;
int pos = 1;
void setup() {
attachInterrupt(A, isr, CHANGE); // D2
attachInterrupt(B, isr, CHANGE); // D3
// attachInterrupt (KEY, isr, CHANGE); // D3
oled.init(); // Инциализация дисплея
oled.setContrast(255); // Макс. яркость
oled.clear(); // очистить дисплей (или буфер)
oled.update(); // обновить.
Wire.begin(); //Инициируем I2C интерфейс
}
void loop() {
enc.tick();
// опрос происходит здесь
if (enc.click()) {
pos++;
}
if (pos > 4) {
pos = 1;
}
switch (pos) {
case 1:
if (enc.left()) {
PWM_LW_MAX = PWM_LW_MAX - 25;
delay(150);
//oled.clear();
}
if (PWM_LW_MAX < 0) {
PWM_LW_MAX = 0;
}
if (enc.right()) {
PWM_LW_MAX = PWM_LW_MAX + 25;
delay(150);
//oled.clear();
}
if (PWM_LW_MAX > 250) {
PWM_LW_MAX = 250;
}
PD = PWM_LW_MAX / 2.5;
break;
case 2:
if (enc.right()) {
PWM_LW_MIN = PWM_LW_MIN + 25;
delay(150);
// oled.clear();
}
if (PWM_LW_MIN > 250) {
PWM_LW_MIN = 250;
}
if (enc.left()) {
PWM_LW_MIN = PWM_LW_MIN - 25;
delay(150);
// oled.clear();
}
if (PWM_LW_MIN < 0) {
PWM_LW_MIN = 0;
}
PN = PWM_LW_MIN / 2.5;
break;
case 3:
if (enc.right()) {
ScD = ScD + 25;
delay(150);
//oled.clear();
}
if (ScD > 250) {
ScD = 250;
}
if (enc.left()) {
ScD = ScD - 25;
delay(150);
//oled.clear();
}
if (ScD < 0) {
ScD = 0;
}
SD = ScD / 2.5;
break;
case 4:
if (enc.right()) {
ScN = ScN + 25;
delay(150);
//oled.clear();
}
if (ScN > 250) {
ScN = 250;
}
if (enc.left()) {
ScN = ScN - 25;
delay(150);
//oled.clear();
}
if (ScN < 0) {
ScN = 0;
}
SN = ScN / 2.5;
break;
}
uint8_t i = 1;
oled.clear();
oled.invertText(0);
oled.setCursor(0, 0);
oled.setScale(2);
oled.invertText(1);
oled.print(" ЯРКОСТЬ ");
oled.invertText(0);
oled.setScale(1);
oled.setCursor(1, 2);
oled.print("Яркость светильника");
oled.setCursor(1, 3);
oled.print("День ");
if (PD < 100) oled.print(" ");
if (PD < 10) oled.print("0");
oled.print(PD);
oled.print("% ");
oled.invertText(1);
for (i = 1; i <= (PD / 10); i++) {
oled.print(" ");
}
oled.invertText(0);
oled.setCursor(1, 4);
oled.print("Ночь ");
if (PN < 100) oled.print(" ");
if (PN < 10) oled.print("0");
oled.print(PN);
oled.print("% ");
oled.invertText(1);
for (i = 1; i <= (PN / 10); i++) {
oled.print(" ");
// counter++;
}
// int counter = 0;
//Serial.println(counter);
//counter++;
//if (counter >= 10) counter = 0;
}
oled.invertText(0);
oled.setCursor(1, 5);
oled.print("Яркость дисплея");
oled.setCursor(1, 6);
oled.print("День ");
if (SD < 100) oled.print(" ");
if (SD < 10) oled.print("0");
oled.print(SD);
oled.print("% ");
oled.invertText(1);
for (i = 1; i <= (SD / 10); i++) {
oled.print(" ");
}
oled.invertText(0);
oled.setCursor(1, 7);
oled.print("Ночь ");
if (SN < 100) oled.print(" ");
if (SN < 10) oled.print("0");
oled.print(SN);
oled.print("% ");
oled.invertText(1);
for (i = 1; i <= (SN / 10); i++) {
oled.print(" ");
}
oled.invertText(0);
oled.update(); // обновить.
}
void isr() {
enc.tickISR(); // в прерывании вызываем тик ISR
}