#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <DHT.h>
// Піни підключення
#define DHTPIN 2
#define DHTTYPE DHT22
#define BUTTON_PIN 3
// Ініціалізація об'єктів
LiquidCrystal_I2C lcd(0x27, 20, 4); // Адреса I2C дисплея 0x27
RTC_DS3231 rtc;
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// Ініціалізація серійного монітору для налагодження
Serial.begin(9600);
// Ініціалізація дисплея
lcd.begin(20,4,8);
lcd.backlight();
// Ініціалізація RTC
if (!rtc.begin()) {
lcd.print("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// Ініціалізація DHT
dht.begin();
// Ініціалізація кнопки (опціонально)
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
// Отримання даних з RTC
DateTime now = rtc.now();
// Отримання даних з DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Перевірка на помилки зчитування з DHT22
if (isnan(temperature) || isnan(humidity)) {
lcd.setCursor(0, 0);
lcd.print("Error reading DHT22");
return;
}
// Виведення часу на дисплей
lcd.setCursor(0, 0);
lcd.print("Time: ");
if (now.hour() < 10) lcd.print('0');
lcd.print(now.hour());
lcd.print(':');
if (now.minute() < 10) lcd.print('0');
lcd.print(now.minute());
lcd.print(':');
if (now.second() < 10) lcd.print('0');
lcd.print(now.second());
// Виведення дати на дисплей
lcd.setCursor(0, 1);
lcd.print("Date: ");
if (now.day() < 10) lcd.print('0');
lcd.print(now.day());
lcd.print('/');
if (now.month() < 10) lcd.print('0');
lcd.print(now.month());
lcd.print('/');
lcd.print(now.year());
// Виведення температури на дисплей
lcd.setCursor(0, 2);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
// Виведення вологості на дисплей
lcd.setCursor(0, 3);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print(" %");
// Затримка перед наступним оновленням
delay(1000);
}