#include <EncButton.h>
// подключаем кнопки на пины
Button btn1H(2);
Button btn2L(3);
// переменные для режимов работы обогрева и вентиляции
int value1H = 0;
int value2L = 0;
unsigned long timing1H = millis(); // переменная хранения точки отсчета 1H
unsigned long timing2L = millis(); // переменная хранения точки отсчета 2L
int tset2L ; //флаг таймера вентиляции
int tset1H ; //флаг таймера обогрева
void setup() {
// пины индикации 1H
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(14, OUTPUT);
pinMode(18, OUTPUT);
// пины индикации 2L
pinMode(15, OUTPUT);
pinMode(16, OUTPUT);
pinMode(17, OUTPUT);
pinMode(19, OUTPUT);
//пины индикации
pinMode(4, OUTPUT); //1H обогрев
pinMode(6, OUTPUT); //2L вентиляция
// шим выход
pinMode(5, OUTPUT);
}
void loop() {
// опрос кнопок происходит здесь
btn1H.tick();
btn2L.tick();
// клик по кнопке - меняем значение переменной, если нажали кнопку 3 раза, выключается обогрев/вентиляция
if (btn1H.click()) {
if (value2L >= 10) {value2L =0; tset2L =0;} //сброс вентиляции при включении обогрева
if (value1H >= 40) {value1H =0; tset1H =0;} //сброс обогрева при 4м нажатии
else{value1H += 10 ;} //счетчик
}
if (btn2L.click()) {
if (value1H >=10) {value1H =0; tset1H =0;} //сброс обогрева при включении вентиляции
if (value2L >=40) {value2L =0; tset2L =0;} //сброс вентиляции при 4м нажатии
else{value2L += 10 ;} //счетчик
}
if (value1H == 0 && value2L == 0) {analogWrite(5, 143);} // часть кода которая отключает обогрев и вентиляцию при нулевых счетчиках
if (value1H >= 10) {digitalWrite(4, HIGH);} //включение индикации обогрева
if (value1H < 10) {digitalWrite(4, LOW);} //выключение индикации обогрева
if (value2L >= 10) {digitalWrite(6, HIGH);} //включение индикации вентиляции
if (value2L < 10) {digitalWrite(6, LOW);} //выключение индикации вентиляции
//выход на сиденье готового сигнала обогрева и вентиляции
// выход на 1H подогрева
if (value1H == 20) {analogWrite(5, 251);}
if (value1H == 30) {analogWrite(5, 216);}
if (value1H == 40) {analogWrite(5, 180);}
//выход на 2L охлаждения
if (value2L == 20) {analogWrite(5, 38);}
if (value2L == 30) {analogWrite(5, 73);}
if (value2L == 40) {analogWrite(5, 105);}
//индикация работы
//выход на 1H индикации подогрева
if (value1H == 0) {digitalWrite(12, LOW); digitalWrite(13, LOW); digitalWrite(14, LOW); digitalWrite(18, LOW);}
if (value1H == 10) {digitalWrite(12, LOW); digitalWrite(13, LOW); digitalWrite(14, LOW); digitalWrite(18, HIGH);}
if (value1H == 20) {digitalWrite(12, HIGH); digitalWrite(13, HIGH); digitalWrite(14, HIGH); digitalWrite(18, LOW);}
if (value1H == 30) {digitalWrite(12, LOW); digitalWrite(13, HIGH); digitalWrite(14, HIGH); digitalWrite(18, LOW);}
if (value1H == 40) {digitalWrite(12, LOW); digitalWrite(13, LOW); digitalWrite(14, HIGH); digitalWrite(18, LOW);}
//выход на 2L индикации охлаждения
if (value2L == 0) {digitalWrite(15, LOW); digitalWrite(16, LOW); digitalWrite(17, LOW); digitalWrite(19, LOW);}
if (value2L == 10) {digitalWrite(15, LOW); digitalWrite(16, LOW); digitalWrite(17, LOW); digitalWrite(19, HIGH);}
if (value2L == 20) {digitalWrite(15, HIGH); digitalWrite(16, HIGH); digitalWrite(17, HIGH); digitalWrite(19, LOW);}
if (value2L == 30) {digitalWrite(15, LOW); digitalWrite(16, HIGH); digitalWrite(17, HIGH); digitalWrite(19, LOW);}
if (value2L == 40) {digitalWrite(15, LOW); digitalWrite(16, LOW); digitalWrite(17, HIGH); digitalWrite(19, LOW);}
//авто режимы
//авто режим 1H подогрева
if (value1H == 10)
{
if (tset1H == 0 && millis() - timing1H >= 1000)
{analogWrite(5, 251); timing1H = millis(); tset1H = 1;}
if (tset1H == 1 && millis() - timing1H >= 300000)
{analogWrite(5, 216); timing1H = millis(); tset1H = 2;}
if (tset1H == 2 && millis() - timing1H >= 300000)
{analogWrite(5, 180); timing1H = millis(); tset1H = 3;}
if (tset1H == 3 && millis() - timing1H >= 300000)
{tset1H = 0; value1H = 0; timing1H = millis();}
}
//авто режим 2L охлаждения
if (value2L == 10)
{
if (tset2L == 0 && millis() - timing2L >= 1000)
{analogWrite(5, 38); timing2L = millis(); tset2L = 1;}
if (tset2L == 1 && millis() - timing2L >= 300000)
{analogWrite(5, 73); timing2L = millis(); tset2L = 2;}
if (tset2L == 2 && millis() - timing2L >= 300000)
{analogWrite(5, 105); timing2L = millis(); tset2L = 3;}
if (tset2L == 3 && millis() - timing2L >= 300000)
{tset2L = 0; value2L = 0; timing2L = millis();}
}
}