#include <Wire.h> // подключение библиотеки для работы с интерфейсом I2C
#include <LiquidCrystal_I2C.h> // подключение библиотеки для управления LCD‑дисплеями типа 16×2 по I2C
const uint8_t LCD1_ADDR = 0x27; // адрес дисплея LCD1 0x27
const uint8_t LCD2_ADDR = 0x26; // адрес дисплея LCD1 0x26
LiquidCrystal_I2C lcd1(LCD1_ADDR, 16, 2); // создание объекта lcd1 для управления первым LCD‑дисплеем
LiquidCrystal_I2C lcd2(LCD2_ADDR, 16, 2); // создание объекта lcd2 для управления вторым LCD‑дисплеем
const int PIN_TEMP = A0; // константа пин A0 подключен к датчику температуры
// Параметры NTC и калибровка
const float R_SERIES = 10000.0; // сопротивление подтягивающего резистора, 10 кОм
const float R0 = 10000.0; // номинальное сопротивление NTC при 25°C, 10 кОм
const float B = 3950.0; // B‑коэффициент термистора
const float T0 = 25.0 + 273.15; // T0 в Кельвинах (25°C)
void setup() {
lcd1.init(); // инициализация дисплея lcd1
lcd2.init(); // инициализация дисплея lcd2
lcd1.backlight(); // включение подсветки дисплея lcd1
lcd2.backlight(); // включение подсветки дисплея lcd2
// Приветствие на первом дисплее
lcd1.setCursor(2, 0); // установка курсора на позицию
lcd1.print("TEMPERATURE"); // вывод сообщения "TEMPERATURE"
lcd1.setCursor(2, 1); // установка курсора на позицию
lcd1.print("ARDUINO UNO"); // вывод сообщения "ARDUINO UNO"
}
void loop() {
int raw = analogRead(PIN_TEMP); // считывание аналогового значение (0–1023) с пина A0
float tempC = readTemperature(raw); // преобразование аналогового значения в температуру в °C
// Вывод температуры на второй дисплей
lcd2.clear(); // очистка экрана
lcd2.setCursor(2, 0); // установка курсора на позицию
lcd2.print("Temp: "); // вывод сообщения "Temp: "
lcd2.print(tempC, 1); // вывод значения температуры, 1 знак после запятой
lcd2.print(" C"); // вывод сообщения " C"
delay(1000); // обновление каждую 1 сек
}
// Расчёт температуры по термистору (уравнение Стейнхарта–Харта в упрощённой форме)
float readTemperature(int adcValue) {
float R = (float)R_SERIES * adcValue / (1023.0 - adcValue); // вычисление сопротивления термистора по значению
float lnR = log(R / R0); // вычисление натурального логарифма отношения текущего сопротивления к сопротивлению при 25 °C (R0)
float invT = (1.0 / T0) + (lnR / B); // рассчет обратной величины температуры (в кельвинах)
return (1.0 / invT) - 273.15; // перевод температуры из кельвинов в °C
}