#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
#define CLK A0 //энкодер
#define DT A1 //энкодер
#define SW A2 // порт кнопки энкодера
int FanPin = A4; // вентилятор продувка 100%
int FPin = A5; // включение фена
int EzUPin = A6; // порт измерения температуры паяльника
int EzIPin = A7; // порт измерения температуры фена
int VykPin = A3; // включение паяльника
int GerkonPin = 8; // геркон
int Nagrev = 13; // нагрев + регулятор оборотоввентилятора
#define PinTok 9 // порт выхода установки шим фен
const int button1 = 12; // переменная кнопки перекл настройкифен-паяльник
const int button3 = 10; //переменная кнопки включения паяльник-фен в зависимости от положения на экране
#include "TimerOne.h"
#include <GyverEncoder.h>
Encoder enc(CLK, DT, SW);
#include <OneButton.h>
float Val = 250; // переменная установки температуры пвяльник
float Valy = 300; // переменная установки температуры фен
float ValU = 0; // переменная измерения температуры паяльника
float ValT = 0; // переменная измерения температуры фена
byte Swr = 1; // переменная состояния порта кнопки энкодера
byte Sww = 1; // переменная состояния сасе
boolean S = 0; // переменная состояния геркона
#define Relay 11 // шим выход установки паяльника
boolean buttonst1 = 0; // переменная кнопки выбора настройки фен/паяльник
boolean buttonst3 = 0; // переменная кнопки включения паяльник , фен
boolean buttonstat3 = 0; //переменная состояния кнопки вк реле паяльника
boolean buttonstat4 = 0; // переменная состояния кнопки вк реле фена
boolean flag1 = 0;
boolean flag2 = 0;
boolean flag3 = 0;
void setup() {
lcd.begin(16, 2); // Включаем наш lcd (в данном случае 16х2)
lcd.setCursor(2,0);
lcd.print("PAYLNAY STANCIY");
lcd.setCursor(5,1);
lcd.print("READY");
delay(3000);
lcd.clear();
pinMode (A3, OUTPUT); // порт включения паяльника
pinMode (A5, OUTPUT); // порт включения фена
pinMode (A6, INPUT); // порт измерения температуры паяльника
pinMode (A7, INPUT); // порт измерения температуры фена
pinMode (A4, OUTPUT); // порт включения продувки вентилятора
pinMode (10, INPUT_PULLUP); // порт кнопки включения фена/паяльника
pinMode (button1, INPUT_PULLUP); // кнопка перекл настройки фен-паяльник
pinMode (8, INPUT_PULLUP); // порт состояния геркона
pinMode (9, OUTPUT); // порт шима выхода фена
pinMode(A0, INPUT_PULLUP); // порт энкодер
pinMode(A1, INPUT_PULLUP); // порт энкодер
pinMode(A2, INPUT_PULLUP); // порт кнопка энкодера
pinMode(11, OUTPUT); // порт шим выход паяльника
pinMode(13, OUTPUT); // порт включения нагрева+рег оборотов вентилятора
Serial.begin(9600);
enc.setType(TYPE2);
Timer1.initialize(1000); // установка таймера на каждые 1000 микросекунд (= 1 мс)
Timer1.attachInterrupt(timerIsr); // запуск таймера
}
void timerIsr() { // прерывание таймера
enc.tick(); // отработка теперь находится здесь
}
void loop() {
ValU = analogRead(A6);
ValT = analogRead(A7);
S = digitalRead(GerkonPin);
buttonst1 = digitalRead(button1);
if (buttonst1 == LOW && flag1 == 0){ Sww = Sww +1;}
flag1 = 1;
if (buttonst1 == HIGH && flag1 == 1) {flag1=0;}
if (Sww > 2) {Sww = 1;}
if (S == HIGH) {digitalWrite(FanPin, LOW);
digitalWrite(Nagrev, HIGH);}
if (S == LOW) digitalWrite(Nagrev, LOW);
if (ValT / 2.27 >= 160 && S == LOW) {digitalWrite(FanPin, HIGH);}
if (ValT / 2.27 >= 100 && S == HIGH) {digitalWrite(FanPin, LOW);}
if (ValT / 2.27 < 100 && S == LOW) {digitalWrite(FanPin, LOW);}
enc.tick();
switch (Sww)
{
case 1: ///////////////////////////////
if (enc.isRight()) Val = Val + 1; // если был поворот направо, увеличиваем на 1
if (Val >= 450) Val = 450 ;
if (enc.isLeft()) Val = Val - 1; // если был поворот налево, уменьшаем на 1
if (Val <= 100) Val = 100 ;
if (enc.isRightH()) Val = Val + 10; // если был поворот направо, увеличиваем на 1
if (Val >= 450) Val = 450 ;
if (enc.isLeftH()) Val = Val - 10; // если был поворот налево, уменьшаем на 1
if (Val <= 100) Val = 100 ;
analogWrite(Relay, Val * 0.56);
analogWrite(PinTok, Valy * 0.56);
ValU = analogRead(A6);
ValT = analogRead(A7);
buttonst3 = digitalRead(button3);
if (buttonst3 == LOW && flag2 == 0){buttonstat3 = !buttonstat3;
digitalWrite(VykPin, buttonstat3);
flag2 = 1;}
if (buttonst3 == HIGH && flag2 == 1) {flag2=0;}
lcd.home();
lcd.print("S>");
lcd.print(Val,0);
lcd.setCursor(6,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print("<");
lcd.setCursor(8,0);
lcd.print(" S=");
lcd.print((ValU / 2.27));
lcd.setCursor(0,1);
lcd.print("F>");
lcd.print(Valy,0);
lcd.setCursor(6,1);
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print(" F=");
lcd.print((ValT / 2.27));
lcd.setCursor(0,1);
lcd.print("F>");
lcd.print(Valy,0);
lcd.setCursor(6,1);
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print(" F=");
lcd.print((ValT / 2.27));
break;
case 2: ///////////////////////////////////////////////
if (enc.isRight()) Valy = Valy + 1; // если был поворот направо, увеличиваем на 1
if (Valy >= 450) Valy = 450 ;
if (enc.isLeft()) Valy = Valy - 1; // если был поворот налево, уменьшаем на 1
if (Valy <= 100) Valy = 100 ;
if (enc.isRightH()) Valy = Valy + 10; // если было удержание + поворот направо, увеличиваем на 5
if (Valy >= 450) Valy = 450 ;
if (enc.isLeftH()) Valy = Valy - 10; // если было удержание + поворот налево, уменьшаем на 5
if (Valy <= 100) Valy = 100 ;
analogWrite(Relay, Val * 10.625);
analogWrite(PinTok, Valy * 51);
ValU = analogRead(A6);
ValT = analogRead(A7);
buttonst3 = digitalRead(button3);
if (buttonst3 == LOW && flag3 == 0){buttonstat4 = !buttonstat4;
digitalWrite(FPin, buttonstat4);
flag3 = 1;}
if (buttonst3 == HIGH && flag3 == 1) {flag3=0;}
ValU = analogRead(A6);
ValT = analogRead(A7);
lcd.home();
lcd.print("S>");
lcd.print(Val,0);
lcd.setCursor(6,0);
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(" ");
lcd.setCursor(8,0);
lcd.print(" S=");
lcd.print((ValU / 2.27));
lcd.setCursor(0,1);
lcd.print("F>");
lcd.print(Valy,0);
lcd.setCursor(6,1);
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print("<");
lcd.setCursor(8,1);
lcd.print(" F=");
lcd.print((ValT / 2.27));
break;
}}