/// пины энкодера
#define CLK 2
#define DT 3
#define SW 4
#define PIN_BTN 5 // кнопка
#define PIN_OUT 9 // транс
#define PIN_TRANS A6
#include <EEPROM.h>
#include "GyverEncoder.h"
#include "GyverButton.h"
#include <GyverOLED.h>
Encoder enc1(CLK, DT, SW); // для работы c кнопкой
GButton butt1(PIN_BTN);
GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;
int val1; // Длительность первого импульса Т
int val2; // Длительность второго Т2
int val3; // Мощьность первого импульса А
int val4; // Мощьность второго А2
int val5; // Пауза между импульсами Р
int8_t arrowPos = 0; // позиция стрелки
bool flagBTN, flagN, flagPULSE;
void setup() {
Serial.begin(9600);
enc1.setType(TYPE2);
butt1.setType(HIGH_PULL);
oled.init(); // инициализация
oled.clear();
// printGUI(); // выводим интерфейс
pinMode(PIN_BTN, INPUT_PULLUP);
pinMode(PIN_OUT, OUTPUT);
EEPROM.get (10, val1); // прочитали параметр из адреса 10
EEPROM.get (20, val2); // прочитали параметр из адреса 20
EEPROM.get (40, val3); // прочитали параметр из адреса 40
EEPROM.get (60, val4); // прочитали параметр из адреса 60
EEPROM.get (80, val5); // прочитали параметр из адреса 80
printGUI(); // выводим интерфейс
}
void loop() {
enc1.tick();
butt1.tick();
if (enc1.isTurn()) { // при любом повороте
//oled.clear();
if (enc1.isRight()) {
arrowPos++;
if (arrowPos >= 5) arrowPos = 4; // ограничиваем позицию курсора
}
if (enc1.isLeft()) {
arrowPos--;
if (arrowPos < 0) arrowPos = 0; // ограничиваем позицию курсора
}
// при нажатом повороте меняем переменные ++
if (enc1.isRightH()) {
switch (arrowPos) {
case 0: val1 += 10;
if (val1 >= 990) val1 = 990;
EEPROM.put (10, val1);
break;
case 1: val3 += 10;
if (val3 >= 100) val3 = 100;
EEPROM.put (40, val3);
break;
case 2: val5 += 10;
if (val5 >= 100) val5 = 100;
EEPROM.put (80, val5);
break;
case 3: val2 += 10;
if (val2 >= 990) val2 = 990;
EEPROM.put (20, val2);
break;
case 4: val4 += 10;
if (val4 >= 100) val4 = 100;
EEPROM.put (60, val4);
break;
}
}
// при нажатом повороте меняем переменные --
if (enc1.isLeftH()) {
switch (arrowPos) {
case 0: val1 -= 10;
if (val1 < 10) val1 = 10;
EEPROM.put (10, val1);
break;
case 1: val3 -= 10;
if (val3 < 30) val3 = 30;
EEPROM.put (40, val3);
break;
case 2: val5 -= 10;
if (val5 < 0) val5 = 0;
EEPROM.put (80, val5);
break;
case 3: val2 -= 10;
if (val2 < 0) val2 = 0;
EEPROM.put (20, val2);
break;
case 4: val4 -= 10;
if (val4 < 30) val4 = 30;
EEPROM.put (60, val4);
break;
}
}
printGUI(); // выводим интерфейс
}
Impuls();
}
void printGUI() {
//oled.clear();
oled.setScale(1);
oled.setCursor(40, 0); oled.print("Длит,МС");
oled.setCursor(90, 0); oled.print("Мощн,%");
oled.setCursorXY(0, 20); oled.print("ИМП_1");
oled.setCursorXY(0, 37); oled.print("ПАУЗА");
oled.setCursorXY(0, 53); oled.print("ИМП_2");
oled.setScale(2);
oled.clear(44, 20, 78, 30);
oled.setCursor(44, 2); oled.print(val1);
oled.clear(100, 20, 129, 30);
oled.setCursor(95, 2); oled.print(val3);
oled.clear(44, 32, 78, 42);
oled.setCursor(44, 4); oled.print(val5);
oled.clear(44, 50, 78, 60);
oled.setCursor(44, 6); oled.print(val2);
oled.clear(100, 50, 129, 60);
oled.setCursor(95, 6); oled.print(val4);
// выводим стрелку
switch (arrowPos) {
case 0: oled.setCursorXY(36, 20);
break;
case 1: oled.setCursorXY(89, 20);
break;
case 2: oled.setCursorXY(36, 37);
break;
case 3: oled.setCursorXY(36, 53);
break;
case 4: oled.setCursorXY(89, 53);
break;
}
oled.clear(36, 20, 42, 30);
oled.clear(89, 20, 93, 30);
oled.clear(36, 37, 42, 47);
oled.clear(36, 50, 42, 60);
oled.clear(89, 50, 93, 60);
oled.setScale(1);
oled.print(">"); // вывести стрелку
}
bool Impuls() {
if (butt1.isClick()) {
flagBTN = 1;
for (int i = 0; i < val1 / 10; i++) {
while (analogRead(PIN_TRANS) > 10);
flagN = true;
if (flagBTN && flagN) {
digitalWrite(PIN_OUT, HIGH);
delayMicroseconds(5000 * val3 / 100);
digitalWrite(PIN_OUT, LOW);
flagN = false;
// Serial.println(tmr1);
}
}
if ( val2 > 0) {
delay(val5);
for (int i = 0; i < val2 / 10; i++) {
while (analogRead(PIN_TRANS) > 10);
flagN = true;
if (flagBTN && flagN) {
digitalWrite(PIN_OUT, HIGH);
delayMicroseconds(5000 * val4 / 100);
digitalWrite(PIN_OUT, LOW);
flagN = false;
// Serial.println(tmr1);
}
}
}
flagBTN = 0;
}
}