#include <LiquidCrystal_I2C.h> // библиотека для дисплея
LiquidCrystal_I2C LCD(0x27, 16, 2); // присваиваем имя дисплею
//#define encoder_CLK 2 // пин 2 подключаем к CLK энкодера
//#define encoder_DT 3 // пин 3 подключаем к DT энкодера
//#define encoder_SW 4 // пин 11 подключаем к SW энкодера
#define buttonPin 11
#define Green_LED_pin 2
#define Red_lED_pin 7
boolean Green_LED = false;
boolean Red_lED = false;
boolean button = false;
boolean press_flag = false;
boolean long_press_flag = false;
unsigned long last_press = 0;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(Green_LED_pin, OUTPUT);
pinMode(Red_lED_pin, OUTPUT);
}
void loop() {
digitalWrite(Green_LED_pin, Green_LED); // Вкл./Выкл. зеленый диод
digitalWrite(Red_lED_pin, Red_lED); // Вкл./Выкл. красный диод
button = digitalRead(buttonPin); // считывает текущее состояние кнопки
if (button == LOW && press_flag == false && millis() - last_press > 100) {
// если кнопка была нажата и не была нажата до этого (флажок короткого нажатия = false)
// и с последненго нажатия прошло более 100 миллисекунд (защита
// от дребезга контактов) то...
press_flag = !press_flag; //...поднять флажок короткого нажатия на кнопку и
last_press = millis(); // присвоить текущее время переменной last_press
}
if (button == LOW && press_flag == true && millis() - last_press > 1000) {
// если кнопку продолжают нажимать более 1 секунды, то...
long_press_flag = !long_press_flag; // ...поднять флажок долгого нажатия и
last_press = millis(); // присвоить текущее время переменной last_press
// Сюда вписываем события неоходимые при длительном нажатии на кнопку
Red_lED = !Red_lED; // например меняем состояние красного диода
}
if (button == HIGH && press_flag == true && long_press_flag == true) {
// если кнопка отпушена и была нажата длительное время, то...
press_flag = !press_flag; // опустить флажок короткого нажатия
long_press_flag = !long_press_flag; // и длинного нажатия
}
if (button == HIGH && press_flag == true && long_press_flag == false) {
// если кнопка отпущена и было только короткое нажатие, то...
press_flag = !press_flag; // опустить флажок короткого нажатия
// сюда вписываем события неоходимые при коротком нажатии на кнопку
Green_LED = !Green_LED; // например меняем состояние зеленого диода
}
}