#include <DHT.h> //add lib
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
DHT dht(2, DHT22); //pin 2 ตั้งชื่อเล่นของLib
LiquidCrystal_I2C lcd (0x27, 16, 2);
RTC_DS1307 rtc;
int t; // อุณหภูมฺิ
int h; // ความชื้น
int y; //ปี
int m; //เดือน
int d; // วัน
int hr; // ชั่วโมง
int mi; // นาที
int s; //วินาที
int num;
int swmenu = 0; // รับค่าจาก sw
//int sw = digitalRead(8);
const int buttonPin = 8;
const int ledPin = 4;
int ledState = HIGH;
int buttonState;
unsigned long prevoiusTime = 0;
unsigned long interval = 50;
void setup() {
Serial.begin(115200);
dht.begin(); //ประการการใช้งานของLib
lcd.init();
lcd.backlight();
rtc.begin();
//pinMode(8, INPUT_PULLUP); // pin sw
//pinMode(4, OUTPUT); //pin led
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState);
}// end setup
void loop() {
millis_sw(); //sw ส่งค่าเข้าไปในฟังก์ชัน millis_sw
}
//////////
void dhtsensor () {
int t = dht.readTemperature();
int h = dht.readHumidity();
Serial.print("ความชื้นสัมพัทธ์: ");
Serial.print(h);
Serial.print("% อุณหภูมิ: ");
Serial.print(t);
Serial.print("°C ");
Serial.println();
lcd.setCursor(0, 0); //row1 , colum1
lcd.print("Temp:");
lcd.print(t);
lcd.print(" C");
lcd.setCursor(0, 1); //row2 , colum1
lcd.print("Humidity:");
lcd.print(h);
lcd.print(" % ");
}
////
//***reading รับค่าจาก sw ต้องการกดปุ่ม sw แล้วไม่มี debounce
void millis_sw() {
int sw = digitalRead(buttonPin);
if (sw != swmenu) {
prevoiusTime = millis();
}
if ((millis() - prevoiusTime) > interval) {
Serial.print("prevoiusTime:");
Serial.println(prevoiusTime);
if (sw != buttonState) {
buttonState = sw;
if (buttonState == HIGH) {
// ledState = !ledState;
num = num + 1;
lcd.clear();
}
}
}
digitalWrite(ledPin, ledState);
if (num == 1 ) {
time();
}
if (num == 2) {
dhtsensor();
}
if (num == 3) {
text();
}
if (num >= 4) {
num = 1;
}
//Serial.print("swmenu:");
//Serial.println(swmenu);
//Serial.print("sw:");
//Serial.println(sw);
Serial.print("num:");
Serial.println(num);
swmenu = sw;
}
//////////
void text () {
lcd.setCursor(2, 0);
lcd.print("Hello world");
lcd.setCursor(5, 1);
lcd.print("1/2567");
}
////////////////
void time () {
DateTime now = rtc.now();
y = now.year();
m = now.month();
d = now.day();
hr = now.hour();
mi = now.minute();
s = now.second ();
Serial.print("Current time: ");
Serial.print(d);
Serial.print('/');
Serial.print(m);
Serial.print('/');
Serial.print(y);
Serial.print(" hr: ");
Serial.print(hr);
Serial.print(':');
Serial.print(mi);
Serial.print(':');
Serial.print(s);
Serial.println();
lcd.setCursor(0, 0); //row , colum
lcd.print("Date:");
if (d < 10) {
lcd.print (0);
}
lcd.print(d);
lcd.print("/");
if (m < 10) {
lcd.print (0);
}
lcd.print(m);
lcd.print("/");
lcd.print(y + 543);
lcd.print(" ");
lcd.setCursor(0, 1); //row , colum
lcd.print("Time:");
if (mi < 10) {
lcd.print (0);
}
lcd.print(hr);
lcd.print(":");
if (mi < 10) {
lcd.print (0);
}
lcd.print(mi);
lcd.print(":");
if (s < 10) {
lcd.print (0);
}
lcd.print(s);
lcd.print(" ");
}
////