#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Encoder.h>
#include <RTClib.h>
#include <DHT.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define DHTPIN 7
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define pinCLK 2
#define pinDT 3
#define pinSW 4
RTC_DS1307 rtc;
Encoder rotary(pinCLK, pinDT);
void setup() {
pinMode(pinSW, INPUT_PULLUP);
lcd.init();
lcd.backlight();
Serial.begin(115200);
if (! rtc.begin()) {
lcd.println("Couldn't find RTC");
lcd.flush();
abort();
}
}
void loop() {
DateTime now = rtc.now();
float t_a, h_a, t_s, h_s;
t_a=dht.readTemperature();
h_a=dht.readHumidity();
static long lastCounter = 0;
long currentCounter = rotary.read() >> 2;
int chec;
if(currentCounter>0){
chec=currentCounter%3;
}
else{
chec=currentCounter%3*(-1);
}
if (lastCounter != currentCounter) {
lcd.setCursor(0, 0);
lastCounter = currentCounter;
switch (chec) {
case 0:
lcd.clear();
lcd.print("Air");
break;
case 1:
lcd.clear();
lcd.print("Soil");
break;
case 2:
lcd.clear();
lcd.print("Control");
break;
}
}
if (digitalRead(pinSW) == LOW) {
rotary.write(0);
lastCounter = 0;
switch (chec) {
case 0:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperature=");
lcd.print(t_a);
lcd.setCursor(0, 1);
lcd.print("Humidity=");
lcd.print(h_a);
break;
case 1:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperature=");
lcd.setCursor(0, 1);
lcd.print("Humidity=");
break;
case 2:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
break;
}
delay(3000);
}
}