notsolowki:
sure thing, one thing i do want to point out. is to make it easier for me wiring wise i set 2 pins as A1
//READ ONLY BUTTON CONFIGURATION
const int pumprelay = A1;
const int drainbutton = A1;
const int fanrelay = A0;
const int drainrelay = A4;
//INITAL PINSTATES
int fanlastState = HIGH;
int draincounter = 0;
int pumpcounter = 0;
int fancounter = 0;
int drainrelayState = HIGH;
int fanrelayState = HIGH;
int pumprelayState = HIGH;
int drainbuttonState = HIGH;
//FAN ON/OFF CYCLE
unsigned long previousMillis = 0; //
unsigned long interval = 0; //
unsigned long onInterval = 138000UL; // FAN ON TIME 2.3 MINUTES
unsigned long offInterval = 1800000UL; // FAN OFF TIME 30 MINUTES
//PUMP ON/OFF CYCLE
unsigned long interval2 = 0;
unsigned long pumppreviousMillis = 0;
unsigned long pumponInterval = 36000UL; // spray on time 26 SECONDS
unsigned long pumpoffInterval = 6480000UL; // sprayer off time 1.8 HRS
//DRAIN RELAY ON TIME
unsigned long startTime;
unsigned long currentTime;
unsigned long period = 2000; //DRAIN OPEN TIME
int previousdrainbuttonState = HIGH;
int currentdrainbuttonState = HIGH;
void setup() {
interval = offInterval;
interval2 = pumpoffInterval;
pinMode (drainbutton, INPUT_PULLUP); //DRAIN ACTIVATION PIN
pinMode (fanrelay, OUTPUT); //FAN POWER RELAY
pinMode (pumprelay, OUTPUT); //WATER PRESSURE PUMP
pinMode (drainrelay, OUTPUT); //DRAIN SOLENOID POWER RELAY
digitalWrite(pumprelay, HIGH); //SET INITAL RELAY STATE
digitalWrite(fanrelay, HIGH); //SET INITAL RELAY STATE
digitalWrite(drainrelay, HIGH); //SET INITAL RELAY STATE
digitalWrite(drainbutton, HIGH); //SET INITAL BUTTON STATE
Serial.begin(9600);
Serial.print("Ready");
}
void loop() {
unsigned long currentMillis = millis();
//FAN CYCLE
if (currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (fanrelayState == HIGH) { //IF ITS OFF
fanrelayState = LOW; // THEN TURN ON
interval = onInterval; // ASK HOW LONG TO STAY ON
}
else {
fanrelayState = HIGH; // OTHERWISE OFF
interval = offInterval; //ASK HOW LONG TO STAY OFF
}
digitalWrite(fanrelay, fanrelayState); //UPDATE STATUS OF FAN
}
//PUMP CYCLE
if (currentMillis - previousMillis > interval2) {
pumppreviousMillis = currentMillis;
if (pumprelayState == HIGH) { //IF ITS OFF
pumprelayState = LOW; // TURN IT ON
interval2 = pumponInterval; //ASK HOW LONG TO TURN IT ON
}
else {
pumprelayState = HIGH; //OTHERWISE TURN IT OFF
interval2 = pumpoffInterval; //ASK HOW LONG TO TURN IT OFF
}
digitalWrite(pumprelay, pumprelayState); //DEBOUNCE
delay(50);
}
//DRAIN CYCLE
currentTime = millis();
previousdrainbuttonState = currentdrainbuttonState;
currentdrainbuttonState = digitalRead(pumprelay); //ASK STATE OF DRAIN BUTTON
if (currentdrainbuttonState != previousdrainbuttonState && currentdrainbuttonState == HIGH)//ASK WHATS THE STATE OF THE BUTTON
{
startTime = millis();
digitalWrite(drainrelay, LOW);//TURN IT ON
}
if (currentTime - startTime >= period) //ASK HOW LONG TO STAY ON
{
digitalWrite(drainrelay, HIGH); //DEBOUNCE
delay(50);
}
}
You still have this wrong:
if (currentMillis - previousMillis > interval2) {
pumppreviousMillis = currentMillis;
you need to use pumppreviousMillis in the if condition.
It is OK that both pins are A1 in this application. In fact it is "clever". When you decide drainbutton should not be driven by pumprelay but from something else (i.e. real button) you can simply set it on another pin and everything will work provided you wrote your code properly.