Need help with code
I'm new at Arduino and am trying to write a sketch so that when a button is pressed, after a certain amount of time, relays begin turning on. Each in sequence after a delay. They stay on while the button is pressed (5v to pin 2). After the button is released, the relays turn off in reverse order after a delay. Currently, I've written the program using delay()...can this be done better using the millis command? If so, how?. Is there a better way? As written, after pin 2 goes low, there is a long delay before the relays start turning off. Prolly because it is going through all the delays of the loop. I'll eventually be triggering with a photocell, so any help there would be appreciated too. Again, I'm new to this so go easy on me. See below. Thanx! Scott
/* Written by Scott Robinson - November 2017. Bible opens and several lights trigger in sequence */
/* Bible light trigger for photo resistor or switch. Turns on relays when PR goes low. 2 sec delay between each. Turns off relays when PR goes high.
UNO Pin Setup
Pin 2 - switch
Pin 6 - Relay 1 (IN1)
Pin 7 - Relay 2 (IN2)
Pin 8 - Relay 3 (IN3)
Pin 9 - Relay 4 (IN4)
Pin 10 - Relay 5 (IN5)
Pin 13 - Power on/off LED
*/
#define RELAY1 6
#define RELAY2 7
#define RELAY3 8
#define RELAY4 9
#define RELAY5 10
int ledPin = 13 ; // setup pin 13 for power on LED
void setup()
{
pinMode(ledPin, OUTPUT) ; //Turn on LED pin 13
digitalWrite (ledPin, HIGH) ;
pinMode(2, INPUT); //setup pin 2 input for switch
digitalWrite (2, LOW); // default low or 0
// Initialise the Arduino data pins for OUTPUT
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
pinMode(RELAY5, OUTPUT);
delay(500); //Wait chip initialization is complete
// Setup - Turn off all relays to start
digitalWrite(RELAY1,HIGH); // Turns Relay Off
digitalWrite(RELAY2,HIGH); // Turns Relay Off
digitalWrite(RELAY3,HIGH); // Turns Relay Off
digitalWrite(RELAY4,HIGH); // Turns Relay Off
digitalWrite(RELAY5,HIGH); // Turns Relay Off
}
void loop()
{
int reading2 = digitalRead(2); // check pin 2 for +5v if switch is used
if (reading2 == 1) // read pin 2 if +5v then
{
delay(2000); // Initial wait
digitalWrite(RELAY1,LOW); // Turns ON Relays 1
delay(1000); // Wait
digitalWrite(RELAY2,LOW); // Turns ON Relay 2
delay(1000); // Wait
digitalWrite(RELAY3,LOW); // Turns ON Relay 3
delay(1000); // Wait
digitalWrite(RELAY4,LOW); // Turns ON Relay 4
delay(1000); // Wait
digitalWrite(RELAY5,LOW); // Turns ON Relay 5
}
else
{ //If pin 2 is low
digitalWrite(RELAY5,HIGH); // Turns OFF Relay 5
delay(1000); // wait
digitalWrite(RELAY4,HIGH); // Turns OFF Relay 4
delay(1000); // wait
digitalWrite(RELAY3,HIGH); // Turns OFF Relay 3
delay(1000); // wait
digitalWrite(RELAY2,HIGH); // Turns OFF Relay 2
delay(1000); // wait
digitalWrite(RELAY1,HIGH); // Turns OFF Relay 1
}
}