#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
const int buzzer = 6; //กำหนดให้ buzzer ต่อกับ pin 6
#define DHTPIN 7 //ต่อ DHT22 เข้ากับ PIN7
#define DHTTYPE DHT22 //กำหนดชนิดของเซนเซอร์ เป็น DHT22
const int led1temperature = 2; //กำหนดให้ led1temperature ต่อกับ pin 2
const int led2humidity = 3; //กำหนดให้ led2humidity ต่อกับ pin 3
int s = 0 , m = 0 , h = 0;
int sec = 5, minutes = 0, hours = 0;
LiquidCrystal_I2C lcd(0x27,16,2);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600); //กำหนดอัตราการส่งข้อมูลเป็น9600คือคำสั่งที่ใช้ส่งข้อความมาที่บอร์ด ARDUINO
Serial.println(F("DHT22 เริ่มทำการตรวจวัดความชื้นและอุณหภูมิ"));
lcd.begin(16,2);
lcd.backlight();
lcd.setBacklight(HIGH);
dht.begin();
pinMode(buzzer, OUTPUT); //กำหนด pin 6 เป็นโหมด OUTPUT
pinMode(led1temperature, OUTPUT); //กำหนด pin 2 เป็นโหมด OUTPUT
pinMode(led2humidity, OUTPUT); //กำหนด pin 3 เป็นโหมด OUTPUT
TCCR1A = 0; // initialize timer1 ในการนับเวลา
TCCR1B = 0; // clear all bit (Modeเป็นแบบNormal ตามในตาราง 2-2 Lab sheet)
OCR1A = 62499; // target at 1 Hz
TIMSK1 = 0; // disable all interrupts
TCNT1 = 0x0; // Reset timer1
TIFR1 = 0x6 ; // Clear all interrupt flags
TCCR1B |= (1 << WGM12); // set to CTC mode (Have a look at Table 2-2)
TCCR1B |= (1 << CS12);
}
void loop() {
if(TIFR1 & (1 <<OCF1A)){ // check match interrupt
TIFR1 = (1 << OCF1A); // clear match interrupt
s++;}
if(s >= 60){
m++;
s = 0;}
if(m >= 60){
h++;
m = 0;}
if (h == hours && m == minutes && s == sec) {
h = 0;
m = 0;
s = 0;
tone(buzzer, 5000); // กำหนดความถี่ของเสียง
delay(5000); // ใช้หน่วงเวลา5วินาที
noTone(buzzer); // Stop sound...
delay(1000);
}
float temperature = dht.readTemperature(); //อ่านค่าอุณหภูมิเป็นองศาเซลเซียส ไว้ในตัวแปร temperature ชนิด float (ทศนิยม)
float humidity = dht.readHumidity(); //อ่านค่าความชื้นไว้ในตัวแปร humidity ชนิด float (ทศนิยม)
lcd.setCursor(0,0);//แสดงความชื้นที่บรรทัดเเรกของlcd
lcd.print("Humidity");
lcd.print(humidity); // แสดงค่าความชื้นบนจอlcd
lcd.print("%");
lcd.setCursor(0,1); //แสดงค่าอุณหภูมิที่บรรทัดที่สองของlcd
lcd.print("Temperature");
lcd.print(temperature); //แสดงค่าอุณหภูมิบนจอlcd
lcd.print("DegreeCelcius");
digitalWrite(led1temperature, HIGH); //ตั้งค่า HIGH เพื่อสั่งให้หลอด led1temperature ไม่ทำงาน
digitalWrite(led2humidity, HIGH); //ตั้งค่า HIGH เพื่อสั่งให้หลอด led2humidity ไม่ทำงาน
if (temperature>33)
digitalWrite(led1temperature, LOW); //ตั้งค่า LOW เพื่อสั่งให้หลอด led1temperature ทำงาน
if (temperature<29)
digitalWrite(led1temperature, LOW); //ตั้งค่า LOW เพื่อสั่งให้หลอด led1temperature ทำงาน
if (humidity<90.00)
digitalWrite(led2humidity, LOW); //ตั้งค่า LOW เพื่อสั่งให้หลอด led2humidity ทำงาน
if (isnan(temperature) || isnan(humidity))
{
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print(F("Humidity: "));
Serial.print(humidity); //แสดงค่าความชื้น
Serial.print(F("% Temperature: "));
Serial.print(temperature); //แสดงค่าอุณหภูมิเป็นองศาเซลเซียส
Serial.println(F("°C "));
}