I'm working on my project on automation using pump and 2 programmable gate valves with RTC, pH sensor, temp sensor and LCD. I have a problem when myRTC.hours reaches 9 A.M. It doesn't execute the command I programmed. I need your help please.
Here is my sketch:
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include<virtuabotixRTC.h>
#define SensorPin 0
#define TempPin 1
#define I2C_ADDR 0x27 // Define I2C Address where the PCF8574A is
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
int pump = 11;
int drain = 12;
int reservoir = 13;
int fstank = 14;
virtuabotixRTC myRTC(8, 9, 10);
float sensorValue = 0;
float pH;
float tempValue = 0;
int temp;
void setup()
{
Serial.begin(9600);
Serial.println("Ready to take pH!");
myRTC.setDS1302Time(00,55,21,5,25,9,2014);
lcd.begin (20, 4, LCD_5x8DOTS);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
pinMode(pump, OUTPUT);
pinMode(drain, OUTPUT);
pinMode(reservoir, OUTPUT);
pinMode(fstank, INPUT);
lcd.setBacklight(HIGH);
}
void loop()
{
myRTC.updateTime();
sensorValue = analogRead(SensorPin);
pH = (0.0178 * sensorValue);
tempValue = analogRead(TempPin);
temp = (tempValue * 0.48828125);
print_date_time_ph();
if (myRTC.hours >= 6 || myRTC.hours < 9)
{
pH_regulate();
}
else if (myRTC.hours == 9) //I can't work on this one.. my relay is active LOW.. but it shows no response or whatsoever
{ //it only shows all OUTPUT in HIGH.
if (myRTC.minutes == 30)
{
digitalWrite(pump, LOW);
digitalWrite(reservoir, HIGH);
digitalWrite(drain, HIGH);
}
if (myRTC.minutes == 59)
{
digitalWrite(pump, HIGH);
digitalWrite(reservoir, HIGH);
digitalWrite(drain, HIGH);
}
else
{
pH_regulate();
}
}
else if (myRTC.hours >= 10 || myRTC.hours < 13)
{
pH_regulate();
}
else if (myRTC.hours == 13)
{
if (myRTC.minutes == 30)
{
digitalWrite(pump, LOW);
digitalWrite(reservoir, HIGH);
digitalWrite(drain, HIGH);
}
if (myRTC.minutes == 59)
{
digitalWrite(pump, HIGH);
digitalWrite(reservoir, HIGH);
digitalWrite(drain, HIGH);
}
else
{
pH_regulate();
}
}
else if (myRTC.hours >= 14 || myRTC.hours < 17)
{
pH_regulate();
}
else if (myRTC.hours == 17)
{
if (myRTC.minutes == 0)
{
digitalWrite(pump, LOW);
digitalWrite(reservoir, HIGH);
digitalWrite(drain, HIGH);
}
if (myRTC.minutes == 2)
{
digitalWrite(pump, HIGH);
digitalWrite(reservoir, HIGH);
digitalWrite(drain, HIGH);
}
else
{
pH_regulate();
}
}
}
void print_date_time_ph()
{
lcd.setCursor(6,0);
lcd.print(myRTC.dayofmonth);
lcd.setCursor(8,0);
lcd.print("/");
lcd.setCursor(9,0);
lcd.print(myRTC.month);
lcd.setCursor(11,0);
lcd.print("/");
lcd.setCursor(12,0);
lcd.print(myRTC.year);
lcd.setCursor(11,1);
lcd.print(myRTC.hours);
lcd.setCursor(13,1);
lcd.print(":");
lcd.setCursor(14,1);
lcd.print(myRTC.minutes);
lcd.setCursor(0,1);
lcd.print("pH:");
lcd.setCursor(3,1);
lcd.print(pH);
lcd.setCursor(0,0);
lcd.print(temp);
lcd.setCursor(2,0);
lcd.print((char)223);
lcd.setCursor(3,0);
lcd.print("C");
delay(1000);
}
void pH_regulate()
{
myRTC.updateTime();
if (pH <= 6.5)
{
if (digitalRead(fstank) == HIGH)
{
digitalWrite(drain, LOW);
digitalWrite(pump, HIGH);
digitalWrite(reservoir, HIGH);
}
if (digitalRead(fstank) == LOW)
{
digitalWrite(reservoir, LOW);
digitalWrite(pump, HIGH);
digitalWrite(drain, HIGH);
}
}
else if (pH >= 7.5)
{
digitalWrite(LED, HIGH);
delay(500);
}
else if (pH > 6.5 || pH < 7.5)
{
if (digitalRead(fstank) == LOW)
{
digitalWrite(reservoir, LOW);
digitalWrite(drain, HIGH);
digitalWrite(pump, HIGH);
}
else
{
digitalWrite(drain, HIGH);
digitalWrite(reservoir, HIGH);
digitalWrite(pump, HIGH);
}
}
}
Can anyone help me please? Thanks.
moderator edit: added code tags ==> # button above smileys