The following code should:
Start Pump 1 when Hi Limit activated (Water tank full)
Latch Pump 1 on until Lo Limit reached (Pump water until tank empty)
If not empty >30 seconds Start Pump 2
If not empty >60 seconds Set Alarm 1
What i am getting when testing is all 3 outputs on straight away when Hi Limit activated instead of the 30 second sequence i had planned.
Any ideas where i am going wrong?
#include <SPI.h>
//.........................................................................................
// Variables
// Set Arduino Pin Numbers:
// Float Switch Pin Numbers:
const int PIN_FLOAT_HI_LIMIT = 2; // High Level Limit (Hi)
const int PIN_FLOAT_LO_LIMIT = 3; // Low Level Limit (Lo)
// Pump Pin Numbers
const int PIN_PUMP_1_ACTIVE = 4; // Pump 1 Run
const int PIN_PUMP_2_ACTIVE = 5; // Pump 2 Run
// Alarm LED Pin Numbers:
const int PIN_ALARM_1 = 6; // Warning Expected Pump Time Exceeded
// Input Status
int STATE_FLOAT_HI_LIMIT = 0; // High Level Limit (Hi) Status
int STATE_FLOAT_LO_LIMIT = 0; // Low Level Limit (Lo) Status
// Output Status
int STATE_ALARM_1 = 0; // Alarm 1 Status
int STATE_PUMP_1 = 0; // Pump 1 Run Status
int STATE_PUMP_2 = 0; // Pump 2 Run Status
// Global Variables Used For Timer
unsigned long startMillis; // Reset Timer Reference
unsigned long currentMillis; // Current Timer Value
const unsigned long period = 30000; // Set Period 1s = 1000ms Set=30s
//.........................................................................................
void setup() {
// put your setup code here, to run once:
// Start SPI Libary
SPI.begin();
// Initialise Float Switches as Inputs
pinMode(PIN_FLOAT_HI_LIMIT, INPUT_PULLUP);
pinMode(PIN_FLOAT_LO_LIMIT, INPUT_PULLUP);
// Initialsie Pumps as Outputs
pinMode(PIN_PUMP_1_ACTIVE, OUTPUT);
pinMode(PIN_PUMP_2_ACTIVE, OUTPUT);
// Initialise Alarm LEDs as Outputs
pinMode(PIN_ALARM_1, OUTPUT);
}
//.........................................................................................
void loop() {
// put your main code here, to run repeatedly:
// IO Read/Write
// Input Status Check (Read)
STATE_FLOAT_HI_LIMIT = digitalRead(PIN_FLOAT_HI_LIMIT); // High Level Limit (Hi) Status Check
STATE_FLOAT_LO_LIMIT = digitalRead(PIN_FLOAT_LO_LIMIT); // Low Level Limit (Lo) Status Check
// Output Set (Write)
digitalWrite(PIN_ALARM_1, STATE_ALARM_1); // SET - Warning Expected Pump Time Exceeded
digitalWrite(PIN_PUMP_1_ACTIVE, STATE_PUMP_1); // SET - Pump 1 Run
digitalWrite(PIN_PUMP_2_ACTIVE, STATE_PUMP_2); // SET - Pump 2 Run
//.........................................................................................
// Hi Limit Float Activated
if (STATE_FLOAT_HI_LIMIT == HIGH)
{
// Latch - Pump Run Until Lo Limit Float De-Activated
while (STATE_FLOAT_LO_LIMIT == HIGH)
{
startMillis = millis(); // Initial Pump Run Start Time 0s
digitalWrite(PIN_PUMP_1_ACTIVE, HIGH); // Duty Pump On
// Pump Run Time >30s Start Standby Pump
if (currentMillis - startMillis >= period) // Time Elapsed >= 30s
{
startMillis = millis(); // Reset Time 0s
digitalWrite(PIN_PUMP_2_ACTIVE, HIGH); //Standby Pump On
// Pump Run Time >60s Set Alarm 1
if (currentMillis - startMillis >= period) // Total Time Elapsed >= 60s
{
digitalWrite(PIN_ALARM_1, HIGH); // SET - Warning Expected Pump Time Exceeded
}
STATE_FLOAT_LO_LIMIT = digitalRead(PIN_FLOAT_LO_LIMIT); // Loop Exit
if (STATE_FLOAT_LO_LIMIT == LOW)
{
break;
}
}
}
}
// Lo Limit Float De-Activated Pump/'s OFF
else (STATE_FLOAT_HI_LIMIT == LOW && STATE_FLOAT_LO_LIMIT == LOW);
{
digitalWrite(PIN_PUMP_1_ACTIVE, LOW); //Duty Pump Off
digitalWrite(PIN_PUMP_2_ACTIVE, LOW); //Standby Pump Off
}
}
