#include <Wire.h>
#include <DHT.h>
#include <RTClib.h>
#include <TM1637Display.h>
#define DHTPIN 14
#define DHTTYPE DHT22
const int CLK = 13;
const int DIO = 12;
const int LED_VERDE = 10;
const int LED_VERMELHO = 11;
DHT dht(DHTPIN, DHTTYPE);
RTC_DS1307 rtc;
TM1637Display display(CLK, DIO);
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_VERMELHO, OUTPUT);
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running!");
}
display.setBrightness(0x0a);
}
void readSensorData(float &humidity, float &temperature) {
humidity = dht.readHumidity();
temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
} else {
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
}
}
void updateDisplay() {
DateTime now = rtc.now();
Serial.print("Current Time: ");
Serial.println(String(now.hour(), DEC) + ":" + String(now.minute(), DEC) + ":" + String(now.second(), DEC));
int combinedValue = now.hour() * 100 + now.minute();
display.showNumberDecEx(combinedValue, 0b01000000);
}
void controlLEDs(float temperature, float humidity, int hour) {
if (hour >= 6 && hour < 18) {
if (temperature < 30 && humidity < 80) {
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_VERMELHO, LOW);
} else {
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_VERMELHO, HIGH);
}
} else {
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_VERMELHO, LOW);
}
}
void loop() {
float humidity, temperature;
readSensorData(humidity, temperature);
DateTime now = rtc.now();
controlLEDs(temperature, humidity, now.hour());
updateDisplay();
delay(2000);
}