#include <IRremote.hpp>
#include <dht11.h>
const int soilSensorPin = A0;
int fanPin1 = 2;
int fanPin2 = 3;
int dht11Pin = 4;
int irReceiverPin = 5;
int humidifierPin = 6;
int humidifierSwitchPin = 7;
int soilPumpPin = 8;
int humPinOn = 0;
dht11 DHT11;
void setup() {
pinMode(fanPin1, OUTPUT);
pinMode(fanPin2, OUTPUT);
pinMode(humidifierPin, OUTPUT);
pinMode(humidifierSwitchPin, OUTPUT);
pinMode(soilPumpPin, OUTPUT);
IrReceiver.begin(irReceiverPin, ENABLE_LED_FEEDBACK);
Serial.begin(9600);
}
volatile float humidity;
volatile float temperature;
float tempratureThreshold = 26;
float humidityThreshold = 35;
float soilMoistureThreshold = 100;
void loop() {
// digitalWrite(fanPin1, HIGH);
// delay(5000);
// digitalWrite(fanPin1, LOW);
int chk = DHT11.read(dht11Pin);
humidity = (float)DHT11.humidity;
temperature = (float)DHT11.temperature;
if (IrReceiver.decode()) {
switch (IrReceiver.decodedIRData.command) {
case 12:
{
Serial.println("Pressed 1; Increase temperature threshold");
tempratureThreshold++;
Serial.print("Temperature threshold(C): ");
Serial.println(tempratureThreshold);
break;
}
case 24:
{
Serial.println("Pressed 2; Increase humidity threshold");
humidityThreshold++;
Serial.print("Humidity threshold(C): ");
Serial.println(humidityThreshold);
break;
}
case 94:
{
Serial.println("Pressed 3; Increase soil moisture threshold");
break;
}
case 8:
{
Serial.println("Pressed 4; Decrease temperature threshold");
tempratureThreshold--;
Serial.print("Temperature threshold(C): ");
Serial.println(tempratureThreshold);
break;
}
case 28:
{
Serial.println("Pressed 5; Decrease humidity threshold");
humidityThreshold--;
Serial.print("Humidity threshold(C): ");
Serial.println(humidityThreshold);
break;
}
case 90:
{
Serial.println("Pressed 6; Decrease soil moisture threshold");
break;
}
}
delay(100);
IrReceiver.resume();
}
if (Serial.available() > 0) {
for (int x = 0; x < 4; x++) {
switch (x) {
case 0:
tempratureThreshold = Serial.parseFloat();
Serial.print("Temperature threshold set to ");
Serial.println(tempratureThreshold);
break;
case 1:
humidityThreshold = Serial.parseFloat();
Serial.print("Humidity threshold set to ");
Serial.println(humidityThreshold);
break;
case 2:
soilMoistureThreshold = Serial.parseFloat();
Serial.print("Soil Moisture threshold set to ");
Serial.println(soilMoistureThreshold);
break;
}
}
while (Serial.available() > 0) {
char t = Serial.read();
}
}
if (temperature > tempratureThreshold) {
digitalWrite(fanPin1, HIGH);
digitalWrite(fanPin2, HIGH);
Serial.println("Fan ✔");
Serial.println("------------------------------------");
} else {
digitalWrite(fanPin1, LOW);
digitalWrite(fanPin2, LOW);
Serial.println("Fan ✘");
Serial.println("------------------------------------");
}
if (humidity < humidityThreshold) {
digitalWrite(humidifierPin, HIGH);
Serial.println("Humidier ✔");
Serial.println("------------------------------------");
delay(100);
if (humPinOn == 0) {
Serial.println("Toggle humifider switch on.");
digitalWrite(humidifierSwitchPin, HIGH);
delay(1000);
digitalWrite(humidifierSwitchPin, LOW);
humPinOn = 1;
}
} else {
digitalWrite(humidifierPin, LOW);
humPinOn = 0;
Serial.println("Humidier ✘");
Serial.println("------------------------------------");
}
// delay(5000);
int soilMoisture = analogRead(soilSensorPin);
Serial.print("Temperature: ");
Serial.println(temperature, 2);
Serial.println("------------------------------------");
Serial.print("Humidity: ");
Serial.println(humidity, 2);
Serial.println("------------------------------------");
Serial.print("Soil Moisture: ");
Serial.println(soilMoisture);
Serial.println("------------------------------------");
if (soilMoisture < soilMoistureThreshold) {
digitalWrite(soilPumpPin, HIGH);
Serial.println("Pump ✔");
Serial.println("------------------------------------");
} else {
digitalWrite(soilPumpPin, LOW);
Serial.println("Pump ✘");
Serial.println("------------------------------------");
}
delay(2000);
}