#include "DHT.h" //Подключение библлотеки для работы с датчиком DHT22
#define DHTPIN 2 // Задаю пин подключения датчика DHT22
#define DHTTYPE DHT22 // Задаю тип датчика DHT
#define RED_LED_PIN 6 // Определение пина для красного светодиода
#define GREEN_LED_PIN 3 // Определение пина зеленого светодиода
int barGraphPins[] = {4, 5, 7, 8, 9, 10, 11, 12, 13, A5};
// Определение пинов для панели
DHT dht(DHTPIN, DHTTYPE); // Инициализация библиотеки для датчика DHT22
void setup() {
Serial.begin(9600); // Инициализация последовательной связи
dht.begin(); // Инициализация библиотеки для датчика DHT22
pinMode(RED_LED_PIN, OUTPUT); // Устанавление режима вывода для пина красного светодиода
pinMode(GREEN_LED_PIN, OUTPUT); // Устанавление режима вывода для пина зеленого светодиода
for (int i = 0; i < 10; i++) { // Начало цикла for kдя работы шкалы температуры
pinMode(i, OUTPUT); // Устанавление режима вывода для каждого пина панели
}
}
void loop() {
delay(2000); // Установление задержки в программе на 2000 миллисекунд
float humidity = dht.readHumidity(); // Вызываем метод для чтения показателя влажности
float temperature = dht.readTemperature(); // Вызываем метод для чтения показателя температуры
if (isnan(humidity) || isnan(temperature)) { //Проверка наличия каких-лмбо показаний датчиков
Serial.println("Ошибка считывания"); // Вывод ошибки при неуспешном определении значений
return; // Завершение функции
}
Serial.print("Влажность: "); // Вывод текста в терминал
Serial.print(humidity); // Вывод значения влажности в терминал
Serial.print(" %\t"); // Вывод единиц измерения в терминал
Serial.print("Температура: "); // Вывод текста в терминал
Serial.print(temperature); // Вывод значения температуры в терминал
Serial.println(" C"); // Вывод единиц измерения в терминал
// Определение условий для цветов светодиодов
if (humidity < 30.0 || humidity > 70.0) {
// Включить красный, выключить зеленый
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
} else {
// Включить зеленый, выключить красный
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, HIGH);
}
displayTemperatureOnBarGraph(temperature); //Вызываем функцию и передаем значение температры
}
void displayTemperatureOnBarGraph(float temperature) {
int activeLEDs; // Задаем активные LED на панеле
// Определение количества светодиодов и условий для включения
if (temperature < 0) {
activeLEDs = 1;
} else if (temperature < 10) {
activeLEDs = 3;
} else if (temperature < 25) {
activeLEDs = 5;
} else if (temperature < 50) {
activeLEDs = 7;
} else {
activeLEDs = 10;
}
// Включаем соответствующее количество светодиодов
for (int i = 0; i < 10; i++) {
digitalWrite(barGraphPins[i], (i < activeLEDs) ? HIGH : LOW);
}
}