#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
dht DHT;
#define DHT22_PIN 5
#define DHTTYPE DHTTYPE
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR,LCD_COLUMNS,LCD_LINES);
RTC_DS1307 rtc;
int relay1=2;
char daysoftheweek[7][12]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
struct {
uint32_t total;
uint32_t ok;
uint32_t crc_error;
uint32_t time_out;
uint32_t connect;
uint32_t ack_l;
uint32_t ack_h;
uint32_t unknown;
} stat = { 0, 0, 0, 0, 0, 0, 0, 0};
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(3,0);
lcd.print("welcome to");
lcd.setCursor(2,1);
lcd.print("smart agriculture");
lcd.setCursor(5,2);
lcd.print("irigation");
lcd.setCursor(7,3);
lcd.print("system");
lcd.clear();
if(! rtc.begin()){
Serial.println("couldn't find RTC");
Serial.flush();
abort();
{
Serial.begin(115200);
Serial.println("dht22_test.ino");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT_LIB_VERSION);
Serial.println();
Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)\tTime (us)");
}
}
}
void loop() {
DateTime now = rtc.now();
lcd.setCursor(3,0);
lcd.print("Time:");
lcd.print(now.hour(),DEC);
lcd.print(":");
lcd.print(now.minute(),DEC);
lcd.print(":");
lcd.print(now.second(),DEC);
delay(500);
if((now.second()>=37 )&&(now.second()<=38))
{
Serial.println("relay1 is on");
digitalWrite(relay1, HIGH);
lcd.setCursor(0,1);
lcd.print("RELAY1:ON");
lcd.setCursor(10,1);
lcd.print("RELAY2:");
lcd.setCursor(0,2);
lcd.print("RELAY3:");
lcd.setCursor(10,2);
lcd.print("RELAY4:");
}
else
{
Serial.println("relay1 is off");
digitalWrite(relay1,LOW);
lcd.setCursor(0,1);
lcd.print("RELAY1:OFF");
lcd.setCursor(10,1);
lcd.print("RELAY2:");
lcd.setCursor(0,2);
lcd.print("RELAY3:");
lcd.setCursor(10,2);
lcd.print("RELAY4:");
}
}
{
// READ DATA
Serial.print("DHT22, \t");
uint32_t start = micros();
int chk = DHT.read22(DHT22_PIN);
uint32_t stop = micros();
stat.total++;
switch (chk)
{
case DHTLIB_OK:
stat.ok++;
Serial.print("OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM:
stat.crc_error++;
Serial.print("Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT:
stat.time_out++;
Serial.print("Time out error,\t");
break;
case DHTLIB_ERROR_CONNECT:
stat.connect++;
Serial.print("Connect error,\t");
break;
case DHTLIB_ERROR_ACK_L:
stat.ack_l++;
Serial.print("Ack Low error,\t");
break;
case DHTLIB_ERROR_ACK_H:
stat.ack_h++;
Serial.print("Ack High error,\t");
break;
default:
stat.unknown++;
Serial.print("Unknown error,\t");
break;
}
Serial.print(DHT.humidity, 1);
Serial.print(",\t");
Serial.print(DHT.temperature, 1);
Serial.print(",\t");
Serial.print(stop - start);
Serial.println();
if (stat.total % 20 == 0)
{
Serial.println("\nTOT\tOK\tCRC\tTO\tCON\tACK_L\tACK_H\tUNK");
Serial.print(stat.total);
Serial.print("\t");
Serial.print(stat.ok);
Serial.print("\t");
Serial.print(stat.crc_error);
Serial.print("\t");
Serial.print(stat.time_out);
Serial.print("\t");
Serial.print(stat.connect);
Serial.print("\t");
Serial.print(stat.ack_l);
Serial.print("\t");
Serial.print(stat.ack_h);
Serial.print("\t");
Serial.print(stat.unknown);
Serial.println("\n");
}
delay(2000);
}