#include <Wire.h> // подключение библиотеки для протокола I2C
#include <LiquidCrystal_I2C.h> // подключение библиотеки для LCD 1602
#include <DHT.h> // подключение библиотеки для датчика
LiquidCrystal_I2C LCD(0x27, 16, 2); // cоздание объекта класса LiquidCrystal
#define DHTPINa 2 // Считывающий пин с датчика 1
#define DHTPINb 3 // Считывающий пин с датчика 2
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dhta(DHTPINa, DHTTYPE); // Создаем объект dhta датчик 1
DHT dhtb(DHTPINb, DHTTYPE); // Создаем объект dhtb датчик 2
void setup() {
LCD.init(); // инициализация LCD дисплея
LCD.backlight(); // включение подсветки дисплея
dhta.begin(); // Инициализируем датчик 1
dhtb.begin(); // Инициализируем датчик 2
}
void loop() {
Serial.begin(9600); // установка соединения на скорости 9600 бод
double tCurrent1 = dhta.readTemperature(); // считываем температуру датчика 1
double tCurrent2 = dhtb.readTemperature(); // считываем температуру датчика 2
// опрос датчиков на Nan, т.е. на возможность получения данных от датчиков
if (isnan(tCurrent1)) { // если данные с датчика невозможно считать
LCD.setCursor(0, 0); LCD.println("Sensor 1: Error"); // выводим ошибку
}
else {
//в противном случае выводим для него значение температуры
LCD.setCursor(0, 0); LCD.print("Sensor 1: "); LCD.print(tCurrent1);
LCD.print((char)223); // символ градуса
LCD.print("C");
}
if (isnan(tCurrent2)) { // аналогично для воторого датчика
LCD.setCursor(0, 1); LCD.println("Sensor 2: Error");
}
else {
LCD.setCursor(0, 1); LCD.print("Sensor 2: "); LCD.print(tCurrent2);
LCD.print((char)223);
LCD.print("C");
}
// точного совпадения обоих датчиков быть не должно.
// Поэтому между датчиками можно заложить некоторую дельту. Пусть это будет примерно 3%
// 3% от текущей температуры равны 0.75, с запасом 1
double delta = 1; // объявление дельты между датчиками
int diff = fabs(tCurrent1 - tCurrent2); // это разница значений первого и второго датчика
Serial.print("Разность между значениями датчиков: ");
Serial.print(diff);
if (diff <= delta) Serial.print(" "); //если разница значений не превышает дельты
if (diff > delta) Serial.print(". Внимание. Значения датчиков сильно различаются!");
// объявление приемлимого диапазона температур на входе в пробоотборник
int tMin = -30; //начальная граница
int tMax = 50; //конечная граница
// если считанная датчиком температура находится в пределах допустимого диапазона
if (tCurrent1 > tMin || tCurrent1 < tMax) {
Serial.println(" "); // все нормально
}
if (tCurrent1 < tMin || tCurrent1 > tMax) { // если значения датчика выходят из диапазона
//вывод температуры от начального до конечного значения
Serial.print("\nЗначения диапазона ");
Serial.print(tMin); Serial.print(" и "); Serial.print(tMax);
Serial.println("\nВнимание! Значение датчика 1 вне границ допуститмого диапазона температур.");
}
delay(1000);
}