#include "DHT.h"
#include "RTClib.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS1307 rtc;
#define DHTPIN 27
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
int Relay = 13;
int vr = 32;
int D;
void setup() {
pinMode(Relay, OUTPUT);
pinMode(vr, INPUT);
digitalWrite(Relay, LOW);
lcd.init();
lcd.backlight();
Serial.begin(57600);
dht.begin();
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
while (1) delay(10);
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now();
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
Serial.print(F("Temperature: "));
Serial.print(f);
Serial.print(F("°F "));
int val = analogRead(vr);
int percent = map(val, 0, 4095, 0, 100);
lcd.setCursor(0, 0);
lcd.printf("%.2f f %d ", f, percent);
lcd.print('%');
Serial.printf("%d ", f, percent);
Serial.print(val);
Serial.print("\t");
Serial.println(percent);
if (percent < 35 && f > 15) {
if (now.second() % 15 == 0 )
{
digitalWrite(Relay, 1);
D = 1;
}
else if (now.second() % 3 == 0 )
{
digitalWrite(Relay, 0);
D = 0;
}
} else {
digitalWrite(Relay, 0);
D = 0;
}
if (D == 1) {
Serial.println("Relay On");
lcd.setCursor(13, 1);
lcd.print("ON");
}
else {
Serial.println("Relay Off");
lcd.setCursor(13, 1);
lcd.print("OFF");
}
lcd.setCursor(0, 1); //แสดงเวลา
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
delay(900);
lcd.clear();
}