#include <LiquidCrystal.h>//библиотека экрана
#include <Servo.h>//библиотека сервопривода
//LCD
const int rs1 = 13, en1 = 12, d4 = 10, d5 = 9, d6 = 8, d7 = 7;
const int en2 = 11;
const int en3 = 6;
const int rs2 = 5;
LiquidCrystal lcd1(rs1, en1, d4, d5, d6, d7);
LiquidCrystal lcd2(rs2, en2, d4, d5, d6, d7);
LiquidCrystal lcd3(rs2, en3, d4, d5, d6, d7);
//назначаем пины для реле
const int relayPin1 = 46;
const int relayPin2 = 48;
const int relayPin3 = 50;
const int relayPin4 = A10;
const int relayPin5 = A11;
const int relayPin6 = A12;
//назначаем пины датчиков протечки
int potpin1 = A3; // аналоговый вывод, используемый для подключения потенциометра
int val1; // переменная для считывания значения с аналогового вывода
int potpin2 = A4;
int val2;
int potpin3 = A5;
int val3;
//назначаем пины датчиков давления
int pot1 = A13;
int pot2 = A14;
int pot3 = A15;
int davl1; // переменная для давления
int davl2;
int davl3;
//назначаем переменные сервоприводам
Servo Servo_temp1;
Servo Servo_temp2;
Servo Servo_temp3;
//назначаем переменные сервоприводам коллектора
Servo Servo_temp1_1;
Servo Servo_temp2_1;
Servo Servo_temp3_1;
//Назначения пинов для кнопок и т.д.
int datchikIn1 = A0;
int datchikIn2 = A1;
int datchikIn3 = A2;
int datchikExt = A6;
int LED = 39;
int Motor1 = 49;
int Motor2 = 51;
int Motor3 = 53;
int MotorVal = 0;
int PLUS1 = 28;
int PLUS2 = 34;
int PLUS3 = 40;
int MINUS1 = 30;
int MINUS2 = 36;
int MINUS3 = 42;
int EXIT1 = 23;
int EXIT2 = 29;
int EXIT3 = 33;
int LEFT1 = 25;
int LEFT2 = 27;
int LEFT3 = 31;
int SELECT1 = 32;
int SELECT2 = 38;
int SELECT3 = 44;
int reglI = 0;
int reglE = 0;
int Menu = 1;
int Display = 1;
int MenuP = 28;
int MenuP2 = 34;
int nombreDeFois;
int numeroPin;
int ModeFonct = 0;
//Значения по умолчанию
int Delta = 2;
float TempMaxE = 75;
float TempMaxI = 35;
int TempMiniI = 15;
float temperatureInt = 1;
float temperatureInt2 = 1;
float temperatureExt = 2;
float *pointeurTI = &temperatureInt;
float *pointeurTE = &temperatureExt;
const float BETA = 3950;
//Приветсвенная начальная надпись-заставка
String TextLCD1L = "HELLO";
String TextLCD1R = " ";
String TextLCD2L = "HELLO";
String TextLCD2R = " ";
String TextLCD3L = "HELLO";
String TextLCD3R = " ";
//-----------------------------------------
void setup()
{
lcd1.begin(16, 2);// Инициируем работу с LCD дисплеем, указывая количество (столбцов, строк)
lcd2.begin(16, 2);
lcd3.begin(16, 2);
Serial.begin(9600);
pinMode(LED, OUTPUT);
pinMode(Motor1, OUTPUT);
pinMode(EXIT1, INPUT_PULLUP);
pinMode(EXIT2, INPUT_PULLUP);
pinMode(EXIT3, INPUT_PULLUP);
pinMode(PLUS1, INPUT_PULLUP);
pinMode(PLUS2, INPUT_PULLUP);
pinMode(PLUS3, INPUT_PULLUP);
pinMode(MINUS1, INPUT_PULLUP);
pinMode(MINUS2, INPUT_PULLUP);
pinMode(MINUS3, INPUT_PULLUP);
pinMode(LEFT1, INPUT_PULLUP);
pinMode(LEFT2, INPUT_PULLUP);
pinMode(LEFT3, INPUT_PULLUP);
pinMode(SELECT1, INPUT_PULLUP);
pinMode(SELECT2, INPUT_PULLUP);
pinMode(SELECT3, INPUT_PULLUP);
pinMode(22, OUTPUT); // устанавливает режим работы - выход
pinMode(24, OUTPUT);
pinMode(26, OUTPUT);
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
pinMode(relayPin3, OUTPUT);
pinMode(relayPin4, OUTPUT);
pinMode(relayPin5, OUTPUT);
pinMode(relayPin6, OUTPUT);
//сервоприводы для датчиков протечки
Servo_temp1.attach(2);//вывод порта к которому подключено управление сервоприводом 1
Servo_temp1.write(90); // устанавливает сервопривод в положение 90
Servo_temp2.attach(3);//вывод порта к которому подключено управление сервоприводом 2
Servo_temp2.write(90);
Servo_temp3.attach(4);//вывод порта к которому подключено управление сервоприводом 3
Servo_temp3.write(90);
//сервоприводы для колллектора(для датчиков темп-ры)
Servo_temp1_1.attach(49);//вывод порта к которому подключено управление сервоприводом 1
Servo_temp1_1.write(90);
Servo_temp2_1.attach(51);//вывод порта к которому подключено управление сервоприводом 2
Servo_temp2_1.write(90);
Servo_temp3_1.attach(53);//вывод порта к которому подключено управление сервоприводом 3
Servo_temp3_1.write(90);
//расчет температуры
int valcaptE = analogRead(datchikExt);
float voltageE = 1 / (log(1 / (1023. / valcaptE - 1)) / BETA + 1.0 / 298.15) - 273.15;
*pointeurTE = (voltageE -0.5)*1+reglE;
int valcaptI = analogRead(datchikIn1);
float voltageI = 1 / (log(1 / (1023. / valcaptI - 1)) / BETA + 1.0 / 298.15) - 273.15;
*pointeurTI = (voltageI -0.5)*1+reglI;
boolean eSELECT1 = digitalRead(SELECT1);
boolean eSELECT2 = digitalRead(SELECT2);
boolean eSELECT3 = digitalRead(SELECT3);
numeroPin=3;
//pinMode(numeroPin,OUTPUT);
nombreDeFois=2;
//Debut
LCDText();
delay (400);
}
void MenuRegl()
{
MenuP = 23;
//Меню 1-го экрана
//опрос кнопок
boolean eEXIT1 = digitalRead(EXIT1);
boolean eSELECT1 = digitalRead(SELECT1);
boolean ePLUS1 = digitalRead(PLUS1);
boolean eLEFT1 = digitalRead(LEFT1);
boolean eMINUS1 = digitalRead(MINUS1);
int valcaptE = analogRead(datchikExt);
float voltageE = 1 / (log(1 / (1023. / valcaptE - 1)) / BETA + 1.0 / 298.15) - 273.15;
*pointeurTE = (voltageE -0.5)*1+reglE;
int valcaptI = analogRead(datchikIn1);
float voltageI = 1 / (log(1 / (1023. / valcaptI - 1)) / BETA + 1.0 / 298.15) - 273.15;
*pointeurTI = (voltageI -0.5)*1+reglI;
//Описание меню,его работа
switch (Menu){
case 1:
Menu1 ();
if (!eEXIT1){
lcd1.clear();
MainMenu();
} else if (!eLEFT1){
lcd1.clear();
Menu7();
} else if (!eSELECT1){
lcd1.clear();
Menu2();
}
break;
case 2:
Menu2();
if (!eEXIT1){
MainMenu();
} else if (!eLEFT1){
lcd1.clear();
Menu1();
} else if (!eSELECT1){
lcd1.clear();
Menu3();
} else if (!eMINUS1){
reglI --;
} else if (!ePLUS1){
reglI ++;
}
break;
case 3:
Menu3 ();
if (!eEXIT1){
MainMenu();
} else if (!eLEFT1){
lcd1.clear();
Menu2();
} else if (!eSELECT1){
lcd1.clear();
Menu4();
} else if (!eMINUS1){
reglE --;
} else if (!ePLUS1){
reglE ++;
}
break;
case 4:
Menu4 ();
if (!eEXIT1){
MainMenu();
} else if (!eLEFT1){
lcd1.clear();
Menu3();
} else if (!eSELECT1){
lcd1.clear();
Menu5();
}
if(temperatureInt>18 & temperatureInt<65)
{
lcd1.clear(); // Чистим дисплей
lcd1.setCursor(0, 1);// Устанавливаем курсор на первый символ второй строки
lcd1.print("normal: ");
lcd1.print(temperatureInt);
lcd1.print(" C"); // Выводим букву С (Цельсия)
Servo_temp1_1.write(45);
digitalWrite(26, LOW);//светодиод гаснет
delay(100);
}
else if (temperatureInt>65)
{
lcd1.clear();
lcd1.setCursor(0, 1);
lcd1.print("hotly: ");
lcd1.print(temperatureInt);
lcd1.print(" C"); // Выводим букву С (Цельсия)
digitalWrite( 10,HIGH);
}
else
{
lcd1.clear();
lcd1.setCursor(0, 1);
lcd1.print("cold: ");
lcd1.print(temperatureInt);
lcd1.print(" C"); // Выводим букву С (Цельсия)
}
if (temperatureInt>75)
{
lcd1.clear();
lcd1.setCursor(0, 0);
lcd1.print("Warning!!!");
lcd1.setCursor(0, 1);
lcd1.print("high temperature");
digitalWrite(26, HIGH);//светодиод загорается
delay(100);
}
else if (temperatureInt<5)
{
lcd1.clear();
lcd1.setCursor(0, 0);
lcd1.print("Warning!!!");
lcd1.setCursor(0, 1);
lcd1.print("Low Temperature");
digitalWrite(26, HIGH);
delay(100);
}
break;
case 5:
Menu5 ();
if (!eEXIT1){
MainMenu();
} else if (!eLEFT1){
lcd1.clear();
Menu4();
} else if (!eSELECT1){
lcd1.clear();
Menu6();
}
break;
case 6: //верно номер5
Menu6 ();
if (!eEXIT1){
MainMenu();
} else if (!eLEFT1){
lcd1.clear();
Menu5();
} else if (!eSELECT1){
lcd1.clear();
Menu7();
}
if(temperatureExt>18 & temperatureExt<65)
{
lcd1.clear(); // Чистим дисплей
lcd1.setCursor(0, 1);// Устанавливаем курсор на первый символ второй строки
lcd1.print("normal: ");
lcd1.print(temperatureExt);
lcd1.print(" C"); // Выводим букву С (Цельсия)
digitalWrite(relayPin1, HIGH);
delay(100);
}
else if (temperatureExt>65)
{
lcd1.clear();
lcd1.setCursor(0, 1);
lcd1.print("hotly: ");
lcd1.print(temperatureExt);
lcd1.print(" C"); // Выводим букву С (Цельсия)
}
else
{
lcd1.clear();
lcd1.setCursor(0, 1);
lcd1.print("cold: ");
lcd1.print(temperatureExt);
lcd1.print(" C"); // Выводим букву С (Цельсия)
}
if (temperatureExt>75)
{
lcd1.clear();
lcd1.setCursor(0, 0);
lcd1.print("Warning!!!");
lcd1.setCursor(0, 1);
lcd1.print("high temperature");
digitalWrite(relayPin1, HIGH);//светодиод загорается
delay(100);
}
if (temperatureExt<5)
{
lcd1.clear();
lcd1.setCursor(0, 0);
lcd1.print("Warning!!!");
lcd1.setCursor(0, 1);
lcd1.print("Low Temperature");
digitalWrite(relayPin1, LOW);
delay(100);
}
break;
case 7:
Menu7 ();
if (!eEXIT1){
MainMenu();
} else if (!eLEFT1){
lcd1.clear();
Menu6();
} else if (!eSELECT1){
lcd1.clear();
Menu8();
}
break;
case 8:
Menu8 ();
if (!eEXIT1){
MainMenu();
} else if (!eLEFT1){
lcd1.clear();
Menu7();
} else if (!eSELECT1){
lcd1.clear();
Menu1();
}
break;
}
}
//Прописываем в каких пунктах меню выводится инфомация с датчиков
void Menu1()
{
Menu = 1;
TextLCD1L = "Davlenie:" ;
TextLCD1R = "P1= " + String(davl1) + "Bar";
LCDText ();
delay(100);
}
void Menu2()
{
Menu = 2;
TextLCD1L = "Reg.Temp.nar." ;
TextLCD1R = String(temperatureInt) + "C";
LCDText ();
delay(100);
}
void Menu3()
{
Menu = 3;
TextLCD1L = "Reg.Temp.EXIT" ;
TextLCD1R = String(temperatureExt) + "C";
LCDText ();
delay(100);
}
void Menu4()
{
Menu = 4;
TextLCD1L = "Izm.Temp.nar";
TextLCD1R = String(TempMaxE) + "C";
LCDText1 ();
delay(100);
}
void Menu5()
{
Menu = 5;
lcd1.setCursor(0, 0);
lcd1.print ("Datchik1");
TextLCD1R = String(TempMaxE) + "C";
delay(100);
}
void Menu6()
{
Menu = 6;
TextLCD1L = "Izm.Temp.EXIT";
LCDText1 ();
delay(100);
}
void Menu7()
{
Menu = 7;
TextLCD1L = "Rashod";
TextLCD1R = String(TempMiniI) + "C";
LCDText1 ();
delay(100);
}
void Menu8()
{
Menu = 8;
TextLCD1L = "Protechka";
TextLCD1R = "YES";
LCDText ();
delay(100);
}
void MainMenu()
{
MenuP = 28;
boolean eSELECT1 = digitalRead(SELECT1);
int valcaptI1 = analogRead(datchikIn1);
float voltageI1 = 1 / (log(1 / (1023. / valcaptI1 - 1)) / BETA + 1.0 / 298.15) - 273.15;
float temperatureInt1 = (voltageI1 -0.5)*1+reglI;
int valcaptE = analogRead(datchikExt);
float voltageE = 1 / (log(1 / (1023. / valcaptE - 1)) / BETA + 1.0 / 298.15) - 273.15;
float temperatureExt = (voltageE -0.5)*1+reglE;
Servo_temp1_1.write(temperatureInt1);
//условие при котором загорится светодиод при высокой темп-ре на выходе
if(temperatureExt>18 & temperatureExt<75)
{
digitalWrite(relayPin1, HIGH);//светодиод гаснет
delay(50);
}
else if (temperatureExt>75)
{
digitalWrite(relayPin1, LOW);//светодиод загорается
delay(50);
}
//Датчик протечки
val1 = analogRead(potpin1); // reads the value of the potentiometer (value between 0 and 1023)
val1 = map(val1, 0, 1023, 90, 0); // scale it to use it with the servo (значение от 0 до 90)
Servo_temp1.write(val1);
if (val1>0 & val1<40)
{
digitalWrite( relayPin1, LOW);
lcd1.clear();
lcd1.setCursor(0, 0);
lcd1.print("Avaria");
lcd1.setCursor(0, 1);
lcd1.print("Protechka 1");
delay(100);
}
else if (val1>40)
{
digitalWrite( relayPin1,HIGH);
delay(100);
}
//Датчик давления - условие загорания светодиода
if (davl1>0 & davl1<3)
{
digitalWrite( relayPin1, HIGH);
}
else if (davl1>3)
{
digitalWrite( relayPin1, LOW);
lcd1.clear();
lcd1.print("Plohoe davlenie");
LCDText3 ();
}
//условие при котором загорится светодиод при высокой темп-ре на выходе
if( (temperatureExt-temperatureInt)<5)
{
digitalWrite(relayPin4, HIGH);//светодиод гаснет
delay(50);
}
else if ((temperatureExt-temperatureInt)>5 )
{
digitalWrite(relayPin4, LOW);//светодиод загорается
delay(50);
}
//Вывод на экран температуры наружного датчика и датчика температуры на выходе котла
TextLCD1L = "TempIn1(C):" + String(temperatureInt1) ;
TextLCD1R = "TempExt(C):" + String((temperatureExt));
LCDText ();
switch (ModeFonct){
case 0:
if (MotorVal==0){
if (TempMaxE > temperatureExt && TempMaxI > temperatureInt && temperatureInt + Delta < temperatureExt){
digitalWrite(Motor1, HIGH);
digitalWrite(LED, HIGH);
MotorVal=1;
}
}
if (MotorVal==1){
if (temperatureInt + 1 >= temperatureExt){
digitalWrite(Motor1, LOW);
digitalWrite(LED, LOW);
MotorVal=0;
}
}
delay(300);
break;
case 1:
if (MotorVal==0){
if ( TempMiniI < temperatureInt && temperatureInt - Delta > temperatureExt){
digitalWrite(Motor1, HIGH);
digitalWrite(LED, HIGH);
MotorVal=1;
}
}
if (MotorVal==1){
if (temperatureInt <= temperatureExt){
digitalWrite(Motor1, LOW);
digitalWrite(LED, LOW);
MotorVal=0;
}
}
delay(300);
break;
}
}
void loop()
{
//Датчик давления
davl1 = analogRead(pot1);
davl1 = map(davl1,0,1023,0,6);
boolean eSELECT1 = digitalRead(SELECT1);
boolean eSELECT2 = digitalRead(SELECT2);
boolean eSELECT3 = digitalRead(SELECT3);
if (MenuP == 28){
MainMenu();
}
if (!eSELECT1){
lcd1.clear();
MenuRegl();
}
if (MenuP == 23){
MenuRegl();
}
if (MenuP2 == 34){
MainMenu2();
}
if (!eSELECT2){
lcd2.clear();
MenuRegl2();
}
if (MenuP2 == 29){
MenuRegl2();
}
}
//////////////////////////////////////////
/////////////////////////////////////////
void LCDText ()
{
lcd1.setCursor(0, 0);
if (MenuP == 23){
lcd1.setCursor(0, 0);
lcd1.print(Menu);
lcd1.print(")");
}
//lcd1.setCursor(1, 0);
lcd1.print(TextLCD1L);
lcd1.setCursor(0, 1);
lcd1.print(TextLCD1R);
}
void LCDText1 ()
{
lcd1.setCursor(0, 0);
if (MenuP == 23){
lcd1.setCursor(0, 0);
lcd1.print(Menu);
lcd1.print(")");
}
//lcd1.setCursor(1, 0);
lcd1.print(TextLCD1L);
}
void LCDText2 ()
{
lcd1.setCursor(0, 0);
if (MenuP ==23){
lcd1.setCursor(0, 0);
lcd1.print(Menu);
}
//lcd1.setCursor(1, 0);
lcd1.print(TextLCD1L);
}
void LCDText3 ()
{
lcd1.setCursor(0, 0);
if (MenuP == 23){
lcd1.setCursor(0, 0);
lcd1.print("");
}
lcd1.setCursor(1, 0);
lcd1.print("");
delay(100);
}
void setup2()
{
lcd2.begin(16, 2);
Serial.begin(9600);
pinMode(LED, OUTPUT);
pinMode(Motor1, OUTPUT);
pinMode(EXIT2, INPUT_PULLUP);
pinMode(PLUS2, INPUT_PULLUP);
pinMode(MINUS2, INPUT_PULLUP);
pinMode(LEFT2, INPUT_PULLUP);
pinMode(SELECT2, INPUT_PULLUP);
pinMode(22, OUTPUT); // устанавливает режим работы - выход
pinMode(24, OUTPUT);
pinMode(26, OUTPUT);
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
pinMode(relayPin3, OUTPUT);
pinMode(relayPin4, OUTPUT);
pinMode(relayPin5, OUTPUT);
pinMode(relayPin6, OUTPUT);
//сервоприводы для датчиков протечки
Servo_temp2.attach(3);//вывод порта к которому подключено управление сервоприводом 2
Servo_temp2.write(90);
//сервоприводы для колллектора(для датчиков темп-ры)
Servo_temp2_1.attach(51);//вывод порта к которому подключено управление сервоприводом 2
Servo_temp2_1.write(90);
//расчет температуры
int valcaptE = analogRead(datchikExt);
float voltageE = 1 / (log(1 / (1023. / valcaptE - 1)) / BETA + 1.0 / 298.15) - 273.15;
*pointeurTE = (voltageE -0.5)*1+reglE;
int valcaptI = analogRead(datchikIn1);
float voltageI = 1 / (log(1 / (1023. / valcaptI - 1)) / BETA + 1.0 / 298.15) - 273.15;
*pointeurTI = (voltageI -0.5)*1+reglI;
boolean eSELECT2 = digitalRead(SELECT2);
numeroPin=3;
//pinMode(numeroPin,OUTPUT);
nombreDeFois=2;
//Debut
LCDText_2unit ();
delay (400);
}
void loop2()
{
//Датчик давления
davl1 = analogRead(pot1);
davl1 = map(davl1,0,1023,0,6);
boolean eSELECT2 = digitalRead(SELECT2);
if (MenuP2 == 34){
MainMenu2();
}
if (!eSELECT2){
lcd2.clear();
MenuRegl2();
}
if (MenuP2 == 29){
MenuRegl2();
}
}
void MenuRegl2()
{
MenuP2 == 29;
//Меню 2-го экрана
//опрос кнопок
boolean eEXIT2 = digitalRead(EXIT2);
boolean eSELECT2 = digitalRead(SELECT2);
boolean ePLUS2 = digitalRead(PLUS2);
boolean eLEFT2 = digitalRead(LEFT2);
boolean eMINUS2 = digitalRead(MINUS2);
int valcaptE = analogRead(datchikExt);
float voltageE = 1 / (log(1 / (1023. / valcaptE - 1)) / BETA + 1.0 / 298.15) - 273.15;
*pointeurTE = (voltageE -0.5)*1+reglE;
int valcaptI2 = analogRead(datchikIn2);
float voltageI2 = 1 / (log(1 / (1023. / valcaptI2 - 1)) / BETA + 1.0 / 298.15) - 273.15;
*pointeurTI = (voltageI2 -0.5)*1+reglI;
float temperatureExt = (voltageE -0.5)*1+reglE;
//Описание меню,его работа
switch (Display){
case 1:
Display1 ();
if (!eEXIT2){
lcd2.clear();
MainMenu2();
} else if (!eLEFT2){
lcd2.clear();
Display7();
} else if (!eSELECT2){
lcd2.clear();
Display2();
}
break;
case 2:
Display2();
if (!eEXIT2){
MainMenu2();
} else if (!eLEFT2){
lcd2.clear();
Display1();
} else if (!eSELECT2){
lcd2.clear();
Display3();
} else if (!eMINUS2){
reglI --;
} else if (!ePLUS2){
reglI ++;
}
break;
case 3:
Display3 ();
if (!eEXIT2){
MainMenu2();
} else if (!eLEFT2){
lcd2.clear();
Display2();
} else if (!eSELECT2){
lcd2.clear();
Display4();
} else if (!eMINUS2){
reglE --;
} else if (!ePLUS2){
reglE ++;
}
break;
case 4:
Display4 ();
if (!eEXIT2){
MainMenu2();
} else if (!eLEFT2){
lcd2.clear();
Display3();
} else if (!eSELECT2){
lcd2.clear();
Display5();
}
if(temperatureInt2>18 & temperatureInt2<65)
{
lcd2.clear(); // Чистим дисплей
lcd2.setCursor(0, 1);// Устанавливаем курсор на первый символ второй строки
lcd2.print("normal: ");
lcd2.print(temperatureInt);
lcd2.print(" C"); // Выводим букву С (Цельсия)
Servo_temp2_1.write(45);
digitalWrite(26, LOW);//светодиод гаснет
delay(500);
}
else if (temperatureInt>65)
{
lcd2.clear();
lcd2.setCursor(0, 1);
lcd2.print("hotly: ");
lcd2.print(temperatureInt);
lcd2.print(" C"); // Выводим букву С (Цельсия)
digitalWrite( 10,HIGH);
}
else
{
lcd2.clear();
lcd2.setCursor(0, 1);
lcd2.print("cold: ");
lcd2.print(temperatureInt);
lcd2.print(" C"); // Выводим букву С (Цельсия)
}
if (temperatureInt>75)
{
lcd2.clear();
lcd2.setCursor(0, 0);
lcd2.print("Warning!!!");
lcd2.setCursor(0, 1);
lcd2.print("high temperature");
digitalWrite(26, HIGH);//светодиод загорается
delay(500);
}
else if (temperatureInt<5)
{
lcd2.clear();
lcd2.setCursor(0, 0);
lcd2.print("Warning!!!");
lcd2.setCursor(0, 1);
lcd2.print("Low Temperature");
digitalWrite(26, HIGH);
delay(500);
}
break;
case 5:
Display5 ();
if (!eEXIT2){
MainMenu2();
} else if (!eLEFT2){
lcd2.clear();
Display4();
} else if (!eSELECT2){
lcd2.clear();
Display6();
}
break;
case 6: //верно номер5
Display6 ();
if (!eEXIT2){
MainMenu2();
} else if (!eLEFT2){
lcd2.clear();
Display5();
} else if (!eSELECT2){
lcd2.clear();
Display7();
}
if(temperatureExt>18 & temperatureExt<65)
{
lcd2.clear(); // Чистим дисплей
lcd2.setCursor(0, 1);// Устанавливаем курсор на первый символ второй строки
lcd2.print("normal: ");
lcd2.print(temperatureExt);
lcd2.print(" C"); // Выводим букву С (Цельсия)
digitalWrite(relayPin1, HIGH);
delay(500);
}
else if (temperatureExt>65)
{
lcd2.clear();
lcd2.setCursor(0, 1);
lcd2.print("hotly: ");
lcd2.print(temperatureExt);
lcd2.print(" C"); // Выводим букву С (Цельсия)
}
else
{
lcd2.clear();
lcd2.setCursor(0, 1);
lcd2.print("cold: ");
lcd2.print(temperatureExt);
lcd2.print(" C"); // Выводим букву С (Цельсия)
}
if (temperatureExt>75)
{
lcd2.clear();
lcd2.setCursor(0, 0);
lcd2.print("Warning!!!");
lcd2.setCursor(0, 1);
lcd2.print("high temperature");
digitalWrite(relayPin1, HIGH);//светодиод загорается
delay(500);
}
if (temperatureExt<5)
{
lcd2.clear();
lcd2.setCursor(0, 0);
lcd2.print("Warning!!!");
lcd2.setCursor(0, 1);
lcd2.print("Low Temperature");
digitalWrite(relayPin1, LOW);
delay(500);
}
break;
case 7:
Display7 ();
if (!eEXIT2){
MainMenu2();
} else if (!eLEFT2){
lcd2.clear();
Display6();
} else if (!eSELECT2){
lcd2.clear();
Display8();
}
break;
case 8:
Display8 ();
if (!eEXIT2){
MainMenu2();
} else if (!eLEFT2){
lcd2.clear();
Display7();
} else if (!eSELECT2){
lcd2.clear();
Display1();
}
break;
}
}
//Прописываем в каких пунктах меню выводится инфомация с датчиков
void Display1()
{
Display = 1;
TextLCD2L = "Davlenie:" ;
TextLCD2R = "P1= " + String(davl1) + "Bar";
LCDText_2unit ();
delay(500);
}
void Display2()
{
Display = 2;
TextLCD2L = "Reg.Temp.nar." ;
TextLCD2R = String(temperatureInt) + "C";
LCDText_2unit ();
delay(500);
}
void Display3()
{
Display = 3;
TextLCD2L = "Reg.Temp.EXIT" ;
TextLCD2R = String(temperatureExt) + "C";
LCDText_2unit ();
delay(500);
}
void Display4()
{
Display = 4;
TextLCD2L = "Izm.Temp.nar";
TextLCD2R = String(TempMaxE) + "C";
LCDText_2unit1 ();
delay(500);
}
void Display5()
{
Display = 5;
lcd2.setCursor(0, 0);
lcd2.print ("Datchik1");
TextLCD2R = String(TempMaxE) + "C";
delay(500);
}
void Display6()
{
Display = 6;
TextLCD2L = "Izm.Temp.EXIT";
LCDText_2unit1 ();
delay(500);
}
void Display7()
{
Display = 7;
TextLCD2L = "Rashod";
TextLCD2R = String(TempMiniI) + "C";
LCDText_2unit1 ();
delay(500);
}
void Display8()
{
Display = 8;
TextLCD2L = "Protechka";
TextLCD2R = "YES";
LCDText_2unit ();
delay(500);
}
void MainMenu2()
{
MenuP2 = 34;
boolean eSELECT2 = digitalRead(SELECT2);
int valcaptI2 = analogRead(datchikIn2);
float voltageI2 = 1 / (log(1 / (1023. / valcaptI2 - 1)) / BETA + 1.0 / 298.15) - 273.15;
float temperatureInt2 = (voltageI2 -0.5)*1+reglI;
int valcaptE = analogRead(datchikExt);
float voltageE = 1 / (log(1 / (1023. / valcaptE - 1)) / BETA + 1.0 / 298.15) - 273.15;
float temperatureExt = (voltageE -0.5)*1+reglE;
Servo_temp2_1.write(temperatureInt2);
//условие при котором загорится светодиод при высокой темп-ре на выходе
if(temperatureExt>18 & temperatureExt<75)
{
digitalWrite(relayPin1, HIGH);//светодиод гаснет
}
else if (temperatureExt>75)
{
digitalWrite(relayPin1, LOW);//светодиод загорается
}
//Датчик протечки
val2 = analogRead(potpin2); // reads the value of the potentiometer (value between 0 and 1023)
val2 = map(val2, 0, 1023, 90, 0); // scale it to use it with the servo (значение от 0 до 90)
Servo_temp2.write(val2);
if (val2>0 & val2<40)
{
digitalWrite( relayPin2, LOW);
lcd2.clear();
lcd2.setCursor(0, 0);
lcd2.print("Avaria");
lcd2.setCursor(0, 1);
lcd2.print("Protechka 2");
}
else if (val2>40)
{
digitalWrite( relayPin2, HIGH);
}
//Датчик давления - условие загорания светодиода
if (davl1>0 & davl1<3)
{
digitalWrite( relayPin1, HIGH);
}
else if (davl1>3)
{
digitalWrite( relayPin1, LOW);
lcd2.clear();
lcd2.print("Plohoe davlenie");
LCDText_2unit3 ();
}
//условие при котором загорится светодиод при высокой темп-ре на выходе
if( (temperatureExt-temperatureInt2)<5)
{
digitalWrite(relayPin4, HIGH);//светодиод гаснет
}
else if ((temperatureExt-temperatureInt2)>5 )
{
digitalWrite(relayPin4,LOW);//светодиод загорается
}
//Вывод на экран температуры наружного датчика и датчика температуры на выходе котла
switch (ModeFonct){
case 0:
if (MotorVal==0){
if (TempMaxE > temperatureExt && TempMaxI > temperatureInt2 && temperatureInt2 + Delta < temperatureExt){
digitalWrite(Motor1, HIGH);
digitalWrite(LED, HIGH);
MotorVal=1;
}
}
if (MotorVal==1){
if (temperatureInt2 + 1 >= temperatureExt){
digitalWrite(Motor1, LOW);
digitalWrite(LED, LOW);
MotorVal=0;
}
}
break;
case 1:
if (MotorVal==0){
if ( TempMiniI < temperatureInt2 && temperatureInt2 - Delta > temperatureExt){
digitalWrite(Motor1, HIGH);
digitalWrite(LED, HIGH);
MotorVal=1;
}
}
if (MotorVal==1){
if (temperatureInt <= temperatureExt){
digitalWrite(Motor1, LOW);
digitalWrite(LED, LOW);
MotorVal=0;
}
}
break;
}
}
//////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
void LCDText_2unit ()
{
lcd2.setCursor(0, 0);
if (MenuP2 == 29){
lcd2.setCursor(0, 0);
lcd2.print(Display);
lcd2.print(")");
}
//lcd2.setCursor(1, 0);
lcd2.print(TextLCD2L);
lcd2.setCursor(0, 1);
lcd2.print(TextLCD2R);
}
void LCDText_2unit1 ()
{
lcd2.setCursor(0, 0);
if (MenuP2 == 29){
lcd2.setCursor(0, 0);
lcd2.print(Display);
lcd2.print(")");
}
//lcd2.setCursor(1, 0);
lcd2.print(TextLCD2L);
}
void LCDText_2unit2 ()
{
lcd2.setCursor(0, 0);
if (MenuP2 == 29){
lcd2.setCursor(0, 0);
lcd2.print(Display);
}
//lcd2.setCursor(1, 0);
lcd2.print(TextLCD2L);
}
void LCDText_2unit3 ()
{
lcd2.setCursor(0, 0);
if (MenuP2 == 29){
lcd2.setCursor(0, 0);
lcd2.print("");
}
lcd2.setCursor(1, 0);
lcd2.print("");
delay(100);
}