#include <LiquidCrystal_I2C.h> /* Подключаем библиотеку для работы
с LCD дисплеем по шине I2C */
const float BETA = 3950; /*объявили постоянную для температурного датчика
из справочника*/
#define temp A0 // объявили переменную для считывания с датчика температуры
#define led_green 3 // объявили переменные для светодиодов
#define led_red 2
#define led_yellow 4
int read_temp = 0; // объявили переменную для вывода на дисплей
int Freeze = 17; // переменная для нижнего порога lcd2
int HOT = 26; // переменная для верхнего порога lcd2
LiquidCrystal_I2C lcd1(0x27, 16, 2); /* Объявляем первый дисплей
указывая параметры дисплея (адрес lcd1 = 0x27, количество столбцов = 16,
количество строк = 2 */
LiquidCrystal_I2C lcd2(0x26, 16, 2); //Объявляем второй дисплей c адресом lcd2 = 0x26
void setup() {
Serial.begin(9600);
lcd1.backlight();// Включаем подсветку LCD дисплея
lcd2.backlight();// Включаем подсветку LCD дисплея
lcd1.init();// Инициируем работу с LCD дисплеем lcd1 = 0x27
lcd1.setCursor(2, 0); // отображение начнется с 2 столбца 1 строки
lcd1.print("temperature"); // вывод на дисплей
lcd2.init();// Инициируем работу с LCD дисплеем lcd1 = 0x26
}
void loop() {
int analogValue = analogRead(temp);//чтение показаний датчика
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;//перевод цифрового значение в градусы
if (read_temp != celsius) // для обновления показаний задаём условие
{
lcd1.setCursor(5, 1); //отображение начнется с 5 столбца 2 строки
lcd1.print(celsius); // выподятся преобразованные показания из напряжения в температуру
read_temp = celsius; } // выполняется условие
if(celsius >= 18 && celsius <= 25)
{digitalWrite(led_green, HIGH); } // 18..25 градусов - норма
else {digitalWrite(led_green, LOW ); }
if(celsius >=26)
{digitalWrite(led_yellow, HIGH); }// <26 градусов
else {digitalWrite(led_yellow,LOW); }
if(celsius <=17)
{digitalWrite(led_red, HIGH); } // <17 градусов
else {digitalWrite(led_red, LOW) ;}
while(celsius > Freeze && celsius < HOT )
{lcd2.init();// Инициируем работу с LCD дисплеем lcd1 = 0x26
lcd2.clear(); break;}
while(celsius < Freeze )
{lcd2.init();// Инициируем работу с LCD дисплеем lcd1 = 0x26
lcd2.setCursor(2, 0); // отображение начнется с 2 столбца 1 строки
lcd2.print("Attention"); // вывод на дисплей
lcd2.setCursor(2, 1);
lcd2.print("Freeze"); break; }
while(celsius > HOT )
{lcd2.init();// Инициируем работу с LCD дисплеем lcd1 = 0x26
lcd2.setCursor(2, 0); // отображение начнется с 2 столбца 1 строки
lcd2.print("Attention"); // вывод на дисплей
lcd2.setCursor(2, 1);
lcd2.print("HOT");break; }
Serial.println(celsius);
delay(10);
}