#include <LiquidCrystal.h> // Подгрузка библиотеки LiquidCrystal.h - взаимодействие с ЖКИ
#include "DHT.h" // Подгрузка библиотеки DHT.h - взаимодействие с датчиком DHT11
#define DHTPIN 7 // Пин для подключения датчика DHT
#define DHTTYPE DHT22 // Тип датчика DHT
#define PIN_RELAY 6 // Пин для подключения реле
#define KN_L 9 // Кнопка ВЛЕВО
#define KN_R 10 // Кнопка ВПРАВО
DHT dht(DHTPIN, DHTTYPE); // Создание экземпляра объекта DHT
LiquidCrystal lcd(12,11,5,4,3,2); // Инициализация портов, которые будут применены.
byte degree[8] = // Кодируем символ градуса
{
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
};
int HUM;
int h;
float t;
unsigned long timing;
void setup()
{
Serial.begin(9600); // Подключение последовательного порта
dht.begin(); // Запуск датчика DHT
lcd.begin(16, 2); // Устанавливаем кол-во столбцов и строк
lcd.createChar(1, degree); // Создаем символ под номером 1 (символ градуса)
lcd.clear(); // Очистка дисплея
pinMode(PIN_RELAY, OUTPUT); // Объявляем пин реле как выход
digitalWrite(PIN_RELAY, LOW); // Выключаем реле
pinMode(KN_L, INPUT); // Объявляем пин кнопки как вход
pinMode(KN_R, INPUT); // Объявляем пин кнопки как вход
HUM = dht.readHumidity(); // Получение данных влажности
}
void loop()
{
t = dht.readTemperature(); // Получение данных температуры
h = dht.readHumidity(); // Получение данных влажности
indicator();
button();
if (millis() - timing > 60000) // Время задержки включения/выключения вентилятора
{
timing = millis();
rele();
}
}
int indicator()
{
lcd.setCursor(1,0); //Вывод на LCD температуры
lcd.print("Temp.:");
lcd.setCursor(8,0);
lcd.print(t);
lcd.print("\1C");
lcd.setCursor(1,1); //Вывод на LCD влажности
lcd.print("Hum.:");
lcd.setCursor(7,1);
lcd.print(h);
lcd.print("% ");
lcd.print("(");
lcd.print(HUM);
lcd.print(")");
lcd.setCursor(1,0); // Убрать курсор за пределы LCD
}
int button()
{
int KN_State_L = digitalRead(KN_L); //Читаем состояние кнопки ВЛЕВО
if(KN_State_L==LOW){
HUM--;
delay (300);
}
int KN_State_R = digitalRead(KN_R); //Читаем состояние кнопки ВПРАВО
if(KN_State_R==LOW){
HUM++;
delay (300);
}
}
int rele()
{
if (h >= HUM) // Работа реле (если влажность ИЛИ температура превышают заданное значение)
{
digitalWrite(PIN_RELAY, HIGH); // Включаем реле
}
else
{
digitalWrite(PIN_RELAY, LOW); // Отключаем реле
}
}