#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;
  
    
  }}
        
   
  

  
NOCOMNCVCCGNDINLED1PWRRelay Module