#include "DHT.h"
#include "LiquidCrystal_I2C.h"
#include "RTClib.h"
#define DHTPIN 27
RTC_DS1307 rtc;
#define DHTTYPE DHT22
int relay = 13, r = 32;
int reNF;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
Serial.println(F("DHTxx test!"));
pinMode(relay, OUTPUT);
lcd.init();
lcd.backlight();
dht.begin();
#ifndef ESP8266
while (!Serial);
#endif
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
while (1) delay(10);
}
}
void loop() {
DateTime now = rtc.now();
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
float hif = dht.computeHeatIndex(f, h);
float hic = dht.computeHeatIndex(t, h, false);
int val = analogRead(r);
float v = val * 3.3 / 4095;
int PR = map(val, 0, 4095, 0, 100);
Serial.printf("C V= %.2f v ", v);
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
// เงื่อนไข เปลี่ยนเงื่อนไขตามโจทย์ ที่ 1
// h ความชื่น , t องศาC , f องศาF , v Potentiometer V , PR Potentiometer %
if (f < 20 && PR > 50) {
if (now.hour() == 16 && now.minute() == 42 && now.second() == 30) {
digitalWrite(relay, 1);
reNF = 1; // แสดงผล reNF == 1 แสดงว่า relay ทำงาน
} else if (now.hour() == 16 && now.minute() == 41 && now.second() == 45) {
digitalWrite(relay, 0);
reNF = 0; // แสดงผล reNF == 0 แสดงว่า relay ไม่ทำทำงาน
}
}
// เงื่อนไข ที่ 2
else {
digitalWrite(relay, 0);
reNF = 0; // แสดงผล reNF == 0 แสดงว่า relay ไม่ทำทำงาน
}
// แสดงผล Serial Monitor
// h ความชื่น , t องศาC , f องศาF , v Potentiometer V , PR Potentiometer %
Serial.print(F("Temperature: "));
Serial.print(t);
Serial.print(F("°C "));
Serial.print(f);
Serial.print(F("°F "));
// แสดงผล บันทัดที่ 1
// h ความชื่น , t องศาC , f องศาF , v Potentiometer V , PR Potentiometer %
lcd.setCursor(0, 0);
lcd.print(t);
lcd.setCursor(6, 0);
lcd.printf("C P= %d ", PR);
lcd.setCursor(14, 0);
lcd.print('%');
// แสดงผล บันทัดที่ 2 เวลา
lcd.setCursor(0, 1);
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
// แสดงผล บันทัดที่ 2
// เงื่อนไข แสดงผล บันทัดที่ สถานะของ relay
// ถ้า reNF == 1 แสดงว่า relay ทำงาน
// ถ้า reNF == 0 แสดงว่า relay ไม่ทำทำงาน
if (reNF == 1) {
Serial.print(" Relay:on");
lcd.setCursor(10, 1);
lcd.print(" : on");
} else {
Serial.print(" Relay:off");
lcd.setCursor(10, 1);
lcd.print(" :off");
}
Serial.print("\n");
if (now.second() == 59) {
delay(500);
lcd.clear();
}
delay(500);
}