//Project By Dani
//Title - Smart Agriculture Monitoring System
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;
DHT dht(5, DHT22);
float temperature;
float humidity;
int counter;

LiquidCrystal_I2C lcd(0x27, 20, 4);

int relay1 = 2;
int relay2 = 4;
int relay3 = 15;
String data;

void setup() {
  Serial.begin(9600);
    lcd.init();
      lcd.backlight();
        pinMode(relay1, OUTPUT);
          pinMode(relay2, OUTPUT);
            pinMode(relay3, OUTPUT);

              lcd.print("Project By Dani!");
                delay(1500);
                  lcd.clear();

                    if (!rtc.begin()) {
                        Serial.println("Couldn't find RTC");
                            Serial.flush();
                                abort();
                                  }

                                    if (!rtc.isrunning()) {
                                        Serial.println("RTC is NOT running, let's set the time!");
                                            rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
                                              }
                                              }

                                              void loop() {
                                                relaycontrol();
                                                  htvalues();
                                                    rtcstatus();
                                                    }

                                                    void relaycontrol() {
                                                      if (Serial.available() > 0) {
                                                          data = Serial.readString();
                                                              Serial.println(data);
                                                                  data.trim();

                                                                      if (data == "motor1 on") {
                                                                            digitalWrite(relay1, HIGH);
                                                                                }
                                                                                    if (data == "motor1 off") {
                                                                                          digitalWrite(relay1, LOW);
                                                                                              }
                                                                                                  if (data == "motor2 on") {
                                                                                                        digitalWrite(relay2, HIGH);
                                                                                                            }
                                                                                                                if (data == "motor2 off") {
                                                                                                                      digitalWrite(relay2, LOW);
                                                                                                                          }
                                                                                                                              if (data == "motor3 on") {
                                                                                                                                    digitalWrite(relay3, HIGH);
                                                                                                                                        }
                                                                                                                                            if (data == "motor3 off") {
                                                                                                                                                  digitalWrite(relay3, LOW);
                                                                                                                                                      }
                                                                                                                                                        }
                                                                                                                                                        }

                                                                                                                                                        void htvalues() {
                                                                                                                                                          temperature = dht.readTemperature();
                                                                                                                                                            humidity = dht.readHumidity();

                                                                                                                                                              if (isnan(temperature) || isnan(humidity)) {
                                                                                                                                                                  Serial.println("Failed to read from DHT sensor!");
                                                                                                                                                                      return;
                                                                                                                                                                        }

                                                                                                                                                                          Serial.println("Data: " + String(counter));
                                                                                                                                                                            Serial.print("Temperature (C): ");
                                                                                                                                                                              Serial.println(temperature);
                                                                                                                                                                                Serial.print("Temperature (F): ");
                                                                                                                                                                                  Serial.println(dht.readTemperature(true));
                                                                                                                                                                                    Serial.print("Humidity: ");
                                                                                                                                                                                      Serial.println(humidity);
                                                                                                                                                                                        Serial.print("Heat Index (C): ");
                                                                                                                                                                                          Serial.println(dht.computeHeatIndex(temperature, humidity, false));
                                                                                                                                                                                            Serial.print("Heat Index (F): ");
                                                                                                                                                                                              Serial.println(dht.computeHeatIndex(temperature, humidity, true));
                                                                                                                                                                                                Serial.println();

                                                                                                                                                                                                  lcd.clear();
                                                                                                                                                                                                    lcd.setCursor(6, 0);
                                                                                                                                                                                                      lcd.print("Temp: ");
                                                                                                                                                                                                        lcd.print(temperature);
                                                                                                                                                                                                          lcd.print(" C");
                                                                                                                                                                                                            lcd.setCursor(6, 1);
                                                                                                                                                                                                              lcd.print("Hum: ");
                                                                                                                                                                                                                lcd.print(humidity);
                                                                                                                                                                                                                  lcd.print(" %");

                                                                                                                                                                                                                    counter++;
                                                                                                                                                                                                                      delay(1000);
                                                                                                                                                                                                                      }

                                                                                                                                                                                                                      void rtcstatus() {
                                                                                                                                                                                                                        DateTime now = rtc.now();

                                                                                                                                                                                                                          Serial.println(String("DateTime::TIMESTAMP_FULL:\t") + now.timestamp(DateTime::TIMESTAMP_FULL));
                                                                                                                                                                                                                            Serial.println(String("DateTime::TIMESTAMP_DATE:\t") + now.timestamp(DateTime::TIMESTAMP_DATE));
                                                                                                                                                                                                                              Serial.println(String("DateTime::TIMESTAMP_TIME:\t") + now.timestamp(DateTime::TIMESTAMP_TIME));
                                                                                                                                                                                                                                Serial.println();

                                                                                                                                                                                                                                  lcd.setCursor(0, 2);
                                                                                                                                                                                                                                    lcd.print(now.timestamp(DateTime::TIMESTAMP_DATE));
                                                                                                                                                                                                                                      lcd.setCursor(0, 3);
                                                                                                                                                                                                                                        lcd.print(now.timestamp(DateTime::TIMESTAMP_TIME));

                                                                                                                                                                                                                                          delay(500);
                                                                                                                                                                                                                                          }
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
GND5VSDASCLSQWRTCDS1307+
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module