#include <Arduino.h>
#include <Wire.h>
#include <LiquidCrystal_I2C_Hangul.h> // Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C_Hangul lcd(0x27,16,2); // адрес 0x3F или 0x27, SCL-PC5(A5), SDA-PC4(A4)
/*Если надпись не появилась, заменить адрес 0x27 на 0x3F */
// Подключение
#define LED_PIN11 5 // пин подключения диода №2-1
#define LED_PIN12 6 // пин подключения диода №2-2
#define LED_PIN21 11 // пин подключения диода №1-1
#define LED_PIN22 12 // пин подключения диода №1-2
#define BTN_PIN1 3 // пин подключения кнопки #1
#define BTN_PIN2 2 // пин подключения кнопки #2
// Глобальные переменные
int OldStateButton; // предыдущее состояние кнопки #1
int OldStateButton2; // предыдущее состояние кнопки #2
uint32_t uLCurrTime; // текущее системное время в миллисекундах
uint32_t uLTimeMin; // минутный счетчик
uint32_t ButtonPress=0; // счетчик нажатий кнопки #1
uint32_t ButtonPress2=0; // счетчик нажатий кнопки #2
//*********************************************************************
void setup (){
// Настройка портов ввода/вывода
pinMode(BTN_PIN1,INPUT_PULLUP); // кнопка#1
pinMode(BTN_PIN2,INPUT_PULLUP); // кнопка#2
pinMode(LED_BUILTIN, OUTPUT); //штатный диод!
pinMode(LED_PIN11, OUTPUT); // подключаемый диод №1-1
pinMode(LED_PIN12, OUTPUT); // подключаемый диод №2-2
pinMode(LED_PIN21, OUTPUT); // подключаемый диод №2-1
pinMode(LED_PIN22, OUTPUT); // подключаемый диод №2-2
// Инициализация дисплея I2C 1602
lcd.init(); // инициализация дисплея
lcd.backlight(); // включить подсветку дисплея
lcd.setCursor(0,0); // позиция, строка
lcd.print("press b1-"); //
lcd.setCursor(0,1); // позиция, строка
lcd.print("press b2-"); //
OldStateButton = digitalRead(BTN_PIN1); // инициализировать предыдущее состояние кнопки #1
OldStateButton2 = digitalRead(BTN_PIN2); // инициализировать предыдущее состояние кнопки #1
}
void loop() {
static uint32_t uLTimeButton,uLTimeButton2;
int StateButton;
int StateButton2;
uLCurrTime = millis(); // получить текущее системное время в миллисекундах
// Счет количества нажатий на кнопку #1
if ((uLCurrTime-uLTimeButton)>=25){ // проверка состояния кнопки #1 выполняется с заданной периодичностью
StateButton = digitalRead(BTN_PIN1); // получить текущее состояние кнопки #1
if ((OldStateButton==0) && (StateButton==1)){ // если предыдущее состояние было "0" кнока нажата, а текущее "1" кнопка отпущена
ButtonPress++; // увеличить значение счетчика нажатий
if (ButtonPress==3){ // если кнопка нажата три раза
ButtonPress=0;
}
lcd.setCursor(9,0); // позиция, строка
lcd.print(ButtonPress); // отображает счетчик нажатий
}
OldStateButton=StateButton; // перезаписать предыдущее состояние кнопки
uLTimeButton=uLCurrTime; // перезаписать предыдущее время проверки
}
if ((uLCurrTime-uLTimeButton2)>=25){ // проверка состояния кнопки #2 выполняется с заданной периодичностью
StateButton2 = digitalRead(BTN_PIN2); // получить текущее состояние кнопки #2
if ((OldStateButton2==0) && (StateButton2==1)){ // если предыдущее состояние было "0" кнока нажата, а текущее "1" кнопка отпущена
ButtonPress2++; // увеличить значение счетчика нажатий
if (ButtonPress2==3){ // если кнопка нажата три раза
ButtonPress2=0;
}
lcd.setCursor(9,1); // позиция, строка
lcd.print(ButtonPress2); // отображает счетчик нажатий
}
OldStateButton2=StateButton2; // перезаписать предыдущее состояние кнопки
uLTimeButton2=uLCurrTime; // перезаписать предыдущее время проверки
}
// Проверка нажатия кнопки №1
if (digitalRead(BTN_PIN1)==0){ // если кнопка №1 в нажатом положении
lcd.setCursor(10,0); // позиция, строка
lcd.print("-1");
digitalWrite(LED_BUILTIN, HIGH); // зажигает штатный диод
}
else { // если кнопка отпущена
lcd.setCursor(10,0); // позиция, строка
lcd.print("-0"); // отобразить значение
digitalWrite(LED_BUILTIN, LOW); // тушит штатный диод
}
// Проверка нажатия кнопки №2
if (digitalRead(BTN_PIN2)==0){ // если кнопка №2 в нажатом положении
lcd.setCursor(10,1); // позиция, строка
lcd.print("-1");
digitalWrite(LED_BUILTIN, HIGH); // зажигает штатный диод
}
else { // если кнопка отпущена
lcd.setCursor(10,1); // позиция, строка
lcd.print("-0"); // отобразить значение
digitalWrite(LED_BUILTIN, LOW); // тушит штатный диод
}
ledlight ();
ledlight2 ();
}
void ledlight () { //условия подачи наряжения на реле для кнопки №1
if (ButtonPress==1){
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
lcd.setCursor(14,0); // позиция, строка
lcd.print("+-");
lcd.setCursor(9,0); // позиция, строка
lcd.print(ButtonPress); // отображает счетчик нажатий
}
else if (ButtonPress==2){
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
lcd.setCursor(14,0); // позиция, строка
lcd.print("++");
}
else {
digitalWrite(5,LOW);
digitalWrite(6,LOW);
lcd.setCursor(14,0); // позиция, строка
lcd.print("--"); // отобразить значение
}
}
void ledlight2 () { //условия подачи наряжения на реле для кнопки №2
if (ButtonPress2==1){
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
lcd.setCursor(14,1); // позиция, строка
lcd.print("+-");
lcd.setCursor(9,1); // позиция, строка
lcd.print(ButtonPress2); // отображает счетчик нажатий
}
else if (ButtonPress2==2){
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
lcd.setCursor(14,1); // позиция, строка
lcd.print("++");
}
else {
digitalWrite(11,LOW);
digitalWrite(12,LOW);
lcd.setCursor(14,1); // позиция, строка
lcd.print("--"); // отобразить значение
}
}