All right here is the updated code
//Library for SainSmart LCD 20x4 I2C
#include <FastIO.h>
#include <I2CIO.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal_SR.h>
#include <LiquidCrystal_SR2W.h>
#include <LiquidCrystal_SR3W.h>
#define lcdAddr 0x27
LiquidCrystal_I2C lcd(lcdAddr, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
//Library for DHT Sensor
#include "DHT.h"
#define DHTTYPE DHT11
//Library for Button
#include <Button.h>
//Library for Datalogger
#include <SD.h>
#include <SPI.h>
const int chipSelect = 10;
//Basic Libraries
#include <Wire.h>
//Analog Sensors
#define DHTPIN A2
DHT dht(DHTPIN, DHTTYPE);
const int WaterLevelPin =A0;
int WaterLevel = 0;
//Digital Outputs
const int MainFanPin = 12;
const int AuxFanPin = 11;
const int HeaterPin = 10;
const int HumidifierPin = 9;
const int LightsPin = 8;
const int WaterPumpPin = 7;
void setup() {
//Define pin modes
pinMode(WaterLevelPin, INPUT);
pinMode(MainFanPin, OUTPUT);
pinMode(AuxFanPin, OUTPUT);
pinMode(HeaterPin, OUTPUT);
pinMode(HumidifierPin, OUTPUT);
pinMode(LightsPin, OUTPUT);
pinMode(WaterPumpPin, OUTPUT);
//Start devices
dht.begin();
lcd.begin(20,4);
//Open serial port
Serial.begin(9600);
Serial.println("DHT Readings");
Serial.print("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
return;
}
Serial.println("card initialized.");
}
void loop() {
//Start reading from DHT sensor
unsigned long currentDataTime = millis();
static unsigned long startDataTime = 0;
float h, t, f, hic, hif;
WaterLevel = map(WaterLevel, 0, 1023, 0, 255);
if (startDataTime == 0) {
startDataTime = currentDataTime;
h = dht.readHumidity();
t = dht.readTemperature();
f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
hif = dht.computeHeatIndex(f, h);
hic = dht.computeHeatIndex(t, h, false);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.println(" *F");
int WaterLevel = analogRead(WaterLevelPin);
//Log data from DHT and water level reading
String dataString = "";
for (int analogPin = 0; analogPin < 3; analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor);
if (analogPin < 2) {
dataString += ",";
}
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
Serial.println(dataString);
}
else {
Serial.println("error opening datalog.txt");
}
}
}
else if (currentDataTime - startDataTime > 5000) {
startDataTime = 0;
}
//Display readings on LCD
lcd.setBacklight(1);
lcd.home();
lcd.print("Temperature");
lcd.setCursor(0,1);
lcd.print(t);
lcd.print("*C");
lcd.setCursor(0,2);
lcd.print("Humidity");
lcd.setCursor(0,3);
lcd.print(h);
lcd.print("*%");
//Sensory responses
unsigned long currentCycleTime = millis();
static unsigned long startCycleTime = 0;
if (startCycleTime == 0) {
startCycleTime = currentCycleTime;
if (t>=28, h>=85) {
digitalWrite(AuxFanPin, HIGH);
}
else if (t>=28, h<=85) {
digitalWrite(MainFanPin, HIGH);
digitalWrite(HumidifierPin, HIGH);
}
else if (t<=28, t>=19, h>=85) {
unsigned long currentRefreshTime = millis();
static unsigned long startRefreshTime = 0;
}
else if (t<=28, t>=19, h<=85) {
digitalWrite(AuxFanPin, HIGH);
digitalWrite(HumidifierPin, HIGH);
}
else if (t<=19, h<=85) {
digitalWrite(HeaterPin, HIGH);
digitalWrite(HumidifierPin, HIGH);
digitalWrite(MainFanPin, HIGH);
}
else if (t<=19, h>=85) {
digitalWrite(HeaterPin, HIGH);
digitalWrite(AuxFanPin, HIGH);
}
}
else if (currentCycleTime - startCycleTime > 60000) {
startCycleTime = 0;
}
}
I have found my mistakes and corrected them, the reading are going as planned but... Im trying to figure out how to keep the relay on for 60 seconds and then restart the cycle over again even while the reading are going on...