/// пины энкодера
#define CLK 2
#define DT 3
#define SW 4
#define PIN_BTN 5 // кнопка
#define PIN_OUT 9 // транс
#define PIN_TRANS 0
#include "GyverEncoder.h"
Encoder enc1(CLK, DT, SW); // для работы c кнопкой
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // адрес 0x27 или 0x3f
#include "GyverButton.h"
GButton butt1(PIN_BTN);
int vals[6] = {50, 90, 50, 80, 30}; // T, T2, A, A2, P
int8_t arrowPos = 0; // позиция стрелки
bool flagBTN, flagN, flagPULSE;
void setup() {
Serial.begin(9600);
enc1.setType(TYPE2);
butt1.setType(LOW_PULL);
lcd.init();
lcd.backlight();
printGUI(); // выводим интерфейс
pinMode(PIN_BTN, INPUT);
pinMode(PIN_OUT, OUTPUT);
}
void loop() {
enc1.tick();
butt1.tick();
if (enc1.isTurn()) { // при любом повороте
lcd.clear();
int increment = 0; // локальная переменная направления
// получаем направление
if (enc1.isRight()) increment = 1;
if (enc1.isLeft()) increment = -1;
arrowPos += increment; // двигаем курсор
arrowPos = constrain(arrowPos, 0, 4); // ограничиваем
increment = 0; // обнуляем инкремент
if (enc1.isRightH()) increment = 10;
if (enc1.isLeftH()) increment = -10;
// меняем параметры
vals[arrowPos] += increment;
printGUI();
}
Impuls();
}
void printGUI() {
lcd.setCursor(0, 0); lcd.print("T:"); lcd.print(vals[0]);
lcd.setCursor(6, 0); lcd.print("T2:"); lcd.print(vals[1]);
lcd.setCursor(0, 1); lcd.print("A:"); lcd.print(vals[2]);
lcd.setCursor(5, 1); lcd.print("A2:"); lcd.print(vals[3]);
lcd.setCursor(11, 1); lcd.print("P:"); lcd.print(vals[4]);
// выводим стрелку
switch (arrowPos) {
case 0: lcd.setCursor(1, 0);
break;
case 1: lcd.setCursor(8, 0);
break;
case 2: lcd.setCursor(1, 1);
break;
case 3: lcd.setCursor(7, 1);
break;
case 4: lcd.setCursor(12, 1);
break;
}
lcd.write(126); // вывести стрелку
}
bool Impuls() {
if (butt1.isClick()) {
flagBTN = 1;
for (int i = 0; i < vals[0] / 10; i++) {
while (analogRead(PIN_TRANS) > 10);
flagN = true;
if (flagBTN && flagN) {
digitalWrite(PIN_OUT, HIGH);
delayMicroseconds(5000 * vals[2] / 100);
digitalWrite(PIN_OUT, LOW);
flagN = false;
// Serial.println(tmr1);
}
}
if ( vals[1] > 0) {
delay(vals[4]);
for (int i = 0; i < vals[1] / 10; i++) {
while (analogRead(PIN_TRANS) > 10);
flagN = true;
if (flagBTN && flagN) {
digitalWrite(PIN_OUT, HIGH);
delayMicroseconds(5000 * vals[3] / 100);
digitalWrite(PIN_OUT, LOW);
flagN = false;
// Serial.println(tmr1);
}
}
}
flagBTN = 0;
}
}