#include <LiquidCrystal_I2C.h> // Подключение библиотеки для работы с ЖК дисплеем по по интерфейсу TWI (I2C)
#define BETA 3950 // Коэффициент для расчета температуры
// Макроопределение для расчета температуры
#define Temperature(x) (1 / (log(1 / (1023.0 / x - 1)) / BETA + 1.0 / 298.15) - 273.15)
#define adressText 39 // Адрес 0x27 ЖК-дисплея для отображения текста
#define adressTemp 40 // Адрес 0x28 ЖК-дисплея для отображения температуры
#define cols 16 // Количество символов в строке
#define rows 2 // Количество строк
LiquidCrystal_I2C LCDtext(adressText, cols, rows); // Конструктор певого дисплея
LiquidCrystal_I2C LCDtemp(adressTemp, cols, rows); // Конструктор второго дисплея
int tempBefore; // Переменная для хранения значения на выходе АЦП
bool isAlarmPrinted; // Напечатано ли аварийное сообщение
bool isNamePrinted;
char degree;
void setup() {
// put your setup code here, to run once:
degree = 176;
LCDtext.init(); // Инициализация первого дисплея
LCDtext.backlight(); // Включение подсветки
LCDtemp.init(); // Инициализация второго дисплея
LCDtemp.backlight();
tempBefore = WriteTemp(); // Отображение температуры
isAlarmPrinted = false; // Напечатана ли тревога
isNamePrinted = false; // Напечатано ли имя
if (analogRead(A1) > 680) isAlarmPrinted = WriteAlarm(isAlarmPrinted, "LOW"); // Вывод аварийного сообщения
else if (analogRead(A1) < 450) isAlarmPrinted = WriteAlarm(isAlarmPrinted, "HIGH");
else isNamePrinted = WriteName(isNamePrinted); // Вывод имени при норм. температуре 10..30 градусов
}
void loop() {
// put your main code here, to run repeatedly:
if (tempBefore != analogRead(A1)) { // При изменении аналогового сигнала
tempBefore = WriteTemp(); // Вывод температуры
if (analogRead(A1) > 680) isAlarmPrinted = WriteAlarm(isAlarmPrinted, "LOW"); // Вывод аварийного сообщения
else if (analogRead(A1) < 450) isAlarmPrinted = WriteAlarm(isAlarmPrinted, "HIGH");
else isNamePrinted = WriteName(isNamePrinted); // Вывод имени при норм. температуре 10..30 градусов
}
}
// Функция вывода имени
bool WriteName(bool isNamePrinted) {
if (!isNamePrinted) {
LCDtext.clear();
LCDtext.setCursor(0, 0);
LCDtext.print("Created by");
LCDtext.setCursor(0, 1);
LCDtext.print("Oleg Nechibylo");
return true;
}
return false;
}
// Функция вывода температуры
int WriteTemp() {
LCDtemp.clear();
LCDtemp.setCursor(0, 0);
//LCDtemp.print("Temperature:");
LCDtemp.print("Temperature:");
LCDtemp.setCursor(0, 1);
LCDtemp.print(Temperature(analogRead(A1)));
//LCDtemp.print(" ");
LCDtemp.print(degree);
LCDtemp.print("C");
return analogRead(A1);
}
// Функция вывода аварийного сообщения
bool WriteAlarm(bool isAlarmPrinted, String str) {
if (!isAlarmPrinted) {
LCDtext.clear();
LCDtext.setCursor(0, 0);
LCDtext.print("Temperature is");
LCDtext.setCursor(0, 1);
LCDtext.print(str);
return true;
}
return false;
}