//Whether or not button is pressed
bool pressed = false;
bool pressed2 = false;
//Whether or not any cycle is running
bool cycling1 = false;
bool cycling2 = false;
//Which cycles are running
bool airSweepCycle1 = false;
bool airSweepCycle2 = false;
bool fullSweepCycle1 = false;
bool fullSweepCycle2 = false;
//Which pins are in use
int pin = 0;
int pin2 = 0;
//Last time pins were read
unsigned long pinlast = 0;
unsigned long pinlast2 = 0;
//Used to flash light during millis rollover protection
bool rolloverlight = false;
void setup()
{
//LED pins
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
//Button pins
pinMode(8,INPUT);
pinMode(9,INPUT);
//Relay pins
pinMode(23,OUTPUT);
pinMode(25,OUTPUT);
pinMode(27,OUTPUT);
pinMode(29,OUTPUT);
pinMode(31,OUTPUT);
pinMode(33,OUTPUT);
pinMode(35,OUTPUT);
pinMode(37,OUTPUT);
pinMode(39,OUTPUT);
pinMode(41,OUTPUT);
pinMode(43,OUTPUT);
pinMode(45,OUTPUT);
pinMode(47,OUTPUT);
pinMode(49,OUTPUT);
pinMode(51,OUTPUT);
pinMode(53,OUTPUT);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(25, LOW);
digitalWrite(27, LOW);
digitalWrite(29, LOW);
digitalWrite(30, LOW);
digitalWrite(31, LOW);
digitalWrite(33, LOW);
digitalWrite(35, LOW);
digitalWrite(37, LOW);
digitalWrite(39, LOW);
digitalWrite(41, LOW);
digitalWrite(43, LOW);
digitalWrite(45, LOW);
digitalWrite(47, LOW);
digitalWrite(49, LOW);
digitalWrite(51, LOW);
digitalWrite(53, LOW);
}
void loop()
{
int button = digitalRead(8);
int button2 = digitalRead(9);
//check current time against max long value to prevent millis rollovers
if(4294967295 - millis() < 25000)
{
rolloverblink();
}
else
{
lightcoloroncycle();
}
//Right relay cycle - check if button is pressed and nothing is running, then starts air sweep
if(button == HIGH & cycling1 == false & airSweepCycle1 == false & fullSweepCycle1 == false)
{
cycling1 = true;
airSweepCycle1 = true;
pin = 23;
digitalWrite(23,HIGH);
pinlast = millis();
}
if(cycling1 == true & airSweepCycle1 == true & pin == 23)
{
unsigned long pin23current = millis();
if(pinlast != 0 & pin23current - pinlast >= 2000)
{
digitalWrite(23,LOW);
pin = 25;
digitalWrite(25,HIGH);
pinlast = millis();
}
}
if(airSweepCycle1 == true & pin == 25)
{
unsigned long pin25current = millis();
if(pinlast > 0 & pin25current - pinlast >= 2000)
{
digitalWrite(25,LOW);
pin = 27;
digitalWrite(27,HIGH);
pinlast = millis();
}
}
if(airSweepCycle1 == true & pin == 27)
{
unsigned long pin27current = millis();
if(pinlast > 0 & pin27current - pinlast >= 2000)
{
digitalWrite(27,LOW);
pin = 29;
digitalWrite(29,HIGH);
pinlast = millis();
}
}
if(airSweepCycle1 == true & pin == 29)
{
unsigned long pin29current = millis();
if(pinlast > 0 & pin29current - pinlast >= 2000)
{
digitalWrite(29,LOW);
pin = 31;
digitalWrite(31,HIGH);
pinlast = millis();
}
}
if(airSweepCycle1 == true & pin == 31)
{
unsigned long pin31current = millis();
if(pinlast > 0 & pin31current - pinlast >= 2000)
{
digitalWrite(31,LOW);
pin = 33;
digitalWrite(33,HIGH);
pinlast = millis();
}
}
if(airSweepCycle1 == true & pin == 33)
{
unsigned long pin33current = millis();
if(pinlast > 0 & pin33current - pinlast >= 2000)
{
digitalWrite(33,LOW);
pin = 35;
digitalWrite(35,HIGH);
pinlast = millis();
}
}
if(airSweepCycle1 == true & pin == 35)
{
unsigned long pin35current = millis();
if(pinlast > 0 & pin35current - pinlast >= 2000)
{
digitalWrite(35,LOW);
pin = 37;
digitalWrite(37,HIGH);
pinlast = millis();
}
}
//Ends air sweep cycle and begins full sweep
if(airSweepCycle1 == true & pin == 37)
{
unsigned long pin37current = millis();
if(pinlast > 0 & pin37current - pinlast >= 2000)
{
digitalWrite(37,LOW);
digitalWrite(23,HIGH);
pin = 23;
pinlast = millis();
airSweepCycle1 = false;
fullSweepCycle1 = true;
}
}
if(fullSweepCycle1 == true & pin == 23)
{
unsigned long pin23current = millis();
if(pin23current - pinlast >= 1000)
{
digitalWrite(25,HIGH);
pinlast = millis();
pin = 25;
}
}
if(fullSweepCycle1 == true & pin == 25)
{
unsigned long pin25current = millis();
if(pin25current - pinlast >= 1000)
{
digitalWrite(27,HIGH);
pinlast = millis();
pin = 27;
}
}
if(fullSweepCycle1 == true & pin == 27)
{
unsigned long pin27current = millis();
if(pin27current - pinlast >= 1000)
{
digitalWrite(29,HIGH);
pinlast = millis();
pin = 29;
}
}
if(fullSweepCycle1 == true & pin == 29)
{
unsigned long pin29current = millis();
if(pin29current - pinlast >= 1000)
{
digitalWrite(31,HIGH);
pinlast = millis();
pin = 31;
}
}
if(fullSweepCycle1 == true & pin == 31)
{
unsigned long pin31current = millis();
if(pin31current - pinlast >= 1000)
{
digitalWrite(33,HIGH);
pinlast = millis();
pin = 33;
}
}
if(fullSweepCycle1 == true & pin == 33)
{
unsigned long pin33current = millis();
if(pin33current - pinlast >= 1000)
{
digitalWrite(35,HIGH);
pinlast = millis();
pin = 35;
}
}
if(fullSweepCycle1 == true & pin == 35)
{
unsigned long pin35current = millis();
if(pin35current - pinlast >= 1000)
{
digitalWrite(37,HIGH);
pinlast = millis();
pin = 37;
}
}
//Checks if full sweep has run then resets to original state
if(fullSweepCycle1 == true & pin == 37)
{
unsigned long pin37current = millis();
if(pin37current - pinlast >= 1000)
{
digitalWrite(23,LOW);
digitalWrite(25,LOW);
digitalWrite(27,LOW);
digitalWrite(29,LOW);
digitalWrite(31,LOW);
digitalWrite(33,LOW);
digitalWrite(35,LOW);
digitalWrite(37,LOW);
pin = 0;
fullSweepCycle1 = false;
airSweepCycle1 = false;
cycling1 = false;
}
}
//Left relay cycle - check if button is pressed and nothing is running, then starts air sweep
if(button2 == HIGH & cycling2 == false & airSweepCycle2 == false & fullSweepCycle2 == false)
{
cycling2 = true;
airSweepCycle2 = true;
pin2 = 39;
digitalWrite(39,HIGH);
pinlast2 = millis();
}
if(cycling2 == true & airSweepCycle2 == true & pin2 == 39)
{
unsigned long pin39current = millis();
if(pinlast2 != 0 & pin39current - pinlast2 >= 2000)
{
digitalWrite(39,LOW);
pin2 = 41;
digitalWrite(41,HIGH);
pinlast2 = millis();
}
}
if(airSweepCycle2 == true & pin2 == 41)
{
unsigned long pin41current = millis();
if(pinlast2 > 0 & pin41current - pinlast2 >= 2000)
{
digitalWrite(41,LOW);
pin2 = 43;
digitalWrite(43,HIGH);
pinlast2 = millis();
}
}
if(airSweepCycle2 == true & pin2 == 43)
{
unsigned long pin43current = millis();
if(pinlast2 > 0 & pin43current - pinlast2 >= 2000)
{
digitalWrite(43,LOW);
pin2 = 45;
digitalWrite(45,HIGH);
pinlast2 = millis();
}
}
if(airSweepCycle2 == true & pin2 == 45)
{
unsigned long pin45current = millis();
if(pinlast2 > 0 & pin45current - pinlast2 >= 2000)
{
digitalWrite(45,LOW);
pin2 = 47;
digitalWrite(47,HIGH);
pinlast2 = millis();
}
}
if(airSweepCycle2 == true & pin2 == 47)
{
unsigned long pin47current = millis();
if(pinlast2 > 0 & pin47current - pinlast2 >= 2000)
{
digitalWrite(47,LOW);
pin2 = 49;
digitalWrite(49,HIGH);
pinlast2 = millis();
}
}
if(airSweepCycle2 == true & pin2 == 49)
{
unsigned long pin49current = millis();
if(pinlast2 > 0 & pin49current - pinlast2 >= 2000)
{
digitalWrite(49,LOW);
pin2 = 51;
digitalWrite(51,HIGH);
pinlast2 = millis();
}
}
if(airSweepCycle2 == true & pin2 == 51)
{
unsigned long pin51current = millis();
if(pinlast2 > 0 & pin51current - pinlast2 >= 2000)
{
digitalWrite(51,LOW);
pin2 = 53;
digitalWrite(53,HIGH);
pinlast2 = millis();
}
}
//Ends air sweep cycle and begins full sweep
if(airSweepCycle2 == true & pin2 == 53)
{
unsigned long pin53current = millis();
if(pinlast2 > 0 & pin53current - pinlast2 >= 2000)
{
digitalWrite(53,LOW);
digitalWrite(39,HIGH);
pin2 = 39;
pinlast2 = millis();
airSweepCycle2 = false;
fullSweepCycle2 = true;
}
}
if(fullSweepCycle2 == true & pin2 == 39)
{
unsigned long pin39current = millis();
if(pin39current - pinlast2 >= 1000)
{
digitalWrite(41,HIGH);
pinlast2 = millis();
pin2 = 41;
}
}
if(fullSweepCycle2 == true & pin2 == 41)
{
unsigned long pin41current = millis();
if(pin41current - pinlast2 >= 1000)
{
digitalWrite(43,HIGH);
pinlast2 = millis();
pin2 = 43;
}
}
if(fullSweepCycle2 == true & pin2 == 43)
{
unsigned long pin43current = millis();
if(pin43current - pinlast2 >= 1000)
{
digitalWrite(45,HIGH);
pinlast2 = millis();
pin2 = 45;
}
}
if(fullSweepCycle2 == true & pin2 == 45)
{
unsigned long pin45current = millis();
if(pin45current - pinlast2 >= 1000)
{
digitalWrite(47,HIGH);
pinlast2 = millis();
pin2 = 47;
}
}
if(fullSweepCycle2 == true & pin2 == 47)
{
unsigned long pin47current = millis();
if(pin47current - pinlast2 >= 1000)
{
digitalWrite(49,HIGH);
pinlast2 = millis();
pin2 = 49;
}
}
if(fullSweepCycle2 == true & pin2 == 49)
{
unsigned long pin49current = millis();
if(pin49current - pinlast2 >= 1000)
{
digitalWrite(51,HIGH);
pinlast2 = millis();
pin2 = 51;
}
}
if(fullSweepCycle2 == true & pin2 == 51)
{
unsigned long pin51current = millis();
if(pin51current - pinlast2 >= 1000)
{
digitalWrite(53,HIGH);
pinlast2 = millis();
pin2 = 53;
}
}
//Checks if full sweep has run then resets to original state
if(fullSweepCycle2 == true & pin2 == 53)
{
unsigned long pin53current = millis();
if(pin53current - pinlast2 >= 1000)
{
digitalWrite(39,LOW);
digitalWrite(41,LOW);
digitalWrite(43,LOW);
digitalWrite(45,LOW);
digitalWrite(47,LOW);
digitalWrite(49,LOW);
digitalWrite(51,LOW);
digitalWrite(53,LOW);
pin2 = 0;
fullSweepCycle2 = false;
airSweepCycle2 = false;
cycling2 = false;
}
}
}
//flashes both lights on and off with a one second delay
void rolloverblink()
{
if(rolloverlight == false)
{
analogWrite(4,255);
analogWrite(7,255);
delay(1000);
rolloverlight = 1;
}
else
{
analogWrite(4,0);
analogWrite(7,0);
delay(1000);
rolloverlight = 0;
}
}
//LED color based on current cycle
void lightcoloroncycle()
{
if(cycling1 == false)
{
analogWrite(4,0);
analogWrite(3,255);
}
if(airSweepCycle1 == true)
{
analogWrite(3,0);
analogWrite(4,255);
}
if(fullSweepCycle1 == true)
{
analogWrite(3,255);
analogWrite(4,224);
}
if(cycling2 == false)
{
analogWrite(7,0);
analogWrite(6,255);
}
if(airSweepCycle2 == true)
{
analogWrite(6,0);
analogWrite(7,255);
}
if(fullSweepCycle2 == true)
{
analogWrite(7,255);
analogWrite(6,224);
}
}