As a newbee, I started my first project with a arduino.
The project is a small home control system. (push buttoms and relays to control the lights).
With the push buttoms I can switch the light on and off. (working)
With one pushbutton I switch all the lights off (working), except one. This one has to go one for X minutes and then go off.
This last function will not work. The light relay 14 stays on.
When I use the delay fucntion it works, but with the millis() function I struggle.
I tested the function in a small sketch and it worked perfect. In the general scetchit refuse to work.
- // 16 ingangen
// TABEL 1
int sw1 = 22; // Arduino Digital I/O pin number
int sw2 = 23;
int sw3 = 24;
int sw4 = 25;
int sw5 = 26;
int sw6 = 27;
int sw7 = 28;
int sw8 = 29;
int sw9 = 30;
int sw10 = 31;
int sw11 = 32;
int sw12 = 33;
int sw13 = 34;
int sw14 = 35; //inkom
int sw15 = 36; // alle verlichting uit + inkom 5 minuten aan.(test 5 seconds)
int sw16 = 37;
#define RELAY_ON 0
#define RELAY_OFF 1
/-----( Declare objects )-----/
/-----( Declare Variables )-----/
//tabel 2
// 16 uitgangen (voor test poort 38 vervangen door 13
#define Relay_1 38
#define Relay_2 39
#define Relay_3 40
#define Relay_4 41
#define Relay_5 42
#define Relay_6 43
#define Relay_7 44
#define Relay_8 45
#define Relay_9 46
#define Relay_10 47
#define Relay_11 48
#define Relay_12 49
#define Relay_13 50
#define Relay_14 51
#define Relay_15 52
#define Relay_16 53
int state1 = HIGH; // status van de relais
int state2 = HIGH;
int state3 = HIGH;
int state4 = HIGH;
int state5 = HIGH;
int state6 = HIGH;
int state7 = HIGH;
int state8 = HIGH;
int state9 = HIGH;
int state10 = HIGH;
int state11 = HIGH;
int state12 = HIGH;
int state13 = HIGH;
int state14 = HIGH;
int state15 = HIGH;
int state16 = HIGH;
int reading; // lezen status drukknop
int previous1 = HIGH; // vorige status relais
int previous2 = HIGH;
int previous3 = HIGH;
int previous4 = HIGH;
int previous5 = HIGH;
int previous6 = HIGH;
int previous7 = HIGH;
int previous8 = HIGH;
int previous9 = HIGH;
int previous10 = HIGH;
int previous11 = HIGH;
int previous12 = HIGH;
int previous13 = HIGH;
int previous14 = HIGH;
int previous15 = HIGH;
int previous16 = HIGH;
long time = 2; // laatste tijd dat de drukknop was ingedrukt
long debounce = 300; // the debounce time, verhoog als de uitgang flikkert
long starttijd;
void setup()
{
pinMode(sw1, INPUT);
pinMode(sw2, INPUT);
pinMode(sw3, INPUT);
pinMode(sw4, INPUT);
pinMode(sw5, INPUT);
pinMode(sw6, INPUT);
pinMode(sw7, INPUT);
pinMode(sw8, INPUT);
pinMode(sw9, INPUT);
pinMode(sw10, INPUT);
pinMode(sw11, INPUT);
pinMode(sw12, INPUT);
pinMode(sw13, INPUT);
pinMode(sw14, INPUT);
pinMode(sw15, INPUT);
pinMode(sw16, INPUT);
//-------( Initialize Pins so relays are inactive at reset)----
digitalWrite(Relay_1, RELAY_OFF);
digitalWrite(Relay_2, RELAY_OFF);
digitalWrite(Relay_3, RELAY_OFF);
digitalWrite(Relay_4, RELAY_OFF);
digitalWrite(Relay_5, RELAY_OFF);
digitalWrite(Relay_6, RELAY_OFF);
digitalWrite(Relay_7, RELAY_OFF);
digitalWrite(Relay_8, RELAY_OFF);
digitalWrite(Relay_9, RELAY_OFF);
digitalWrite(Relay_10, RELAY_OFF);
digitalWrite(Relay_11, RELAY_OFF);
digitalWrite(Relay_12, RELAY_OFF);
digitalWrite(Relay_13, RELAY_OFF);
digitalWrite(Relay_14, RELAY_OFF);
digitalWrite(Relay_15, RELAY_OFF);
digitalWrite(Relay_16, RELAY_OFF);
pinMode(Relay_1, OUTPUT);
pinMode(Relay_2, OUTPUT);
pinMode(Relay_3, OUTPUT);
pinMode(Relay_4, OUTPUT);
pinMode(Relay_5, OUTPUT);
pinMode(Relay_6, OUTPUT);
pinMode(Relay_7, OUTPUT);
pinMode(Relay_8, OUTPUT);
pinMode(Relay_9, OUTPUT);
pinMode(Relay_10, OUTPUT);
pinMode(Relay_11, OUTPUT);
pinMode(Relay_12, OUTPUT);
pinMode(Relay_13, OUTPUT);
pinMode(Relay_14, OUTPUT);
pinMode(Relay_15, OUTPUT);
pinMode(Relay_16, OUTPUT);
}
void loop()
//input 1
{
reading = digitalRead(sw1);
// if the input just went from LOW and HIGH and we've waited long enough
// to ignore any noise on the circuit, toggle the output pin and remember
// the time
if (reading == LOW && previous1 == HIGH && millis() - time > debounce)
{
if (state1 == HIGH) state1 = LOW;
else state1 = HIGH;
time = millis();
}
digitalWrite(Relay_1, state1);
previous1 = reading;
//input 2
reading = digitalRead(sw2);
if (reading == LOW && previous2 == HIGH && millis() - time > debounce)
{
if (state2 == HIGH) state2 = LOW;
else state2 = HIGH;
time = millis();
}
digitalWrite(Relay_2, state2);
previous2 = reading;
..........
//input 13
reading = digitalRead(sw13);
if (reading == LOW && previous13 == HIGH && millis() - time > debounce)
{
if (state13 == HIGH) state13 = LOW;
else state13 = HIGH;
time = millis();
}
digitalWrite(Relay_13, state13);
previous13 = reading;
input 14
reading = digitalRead(sw14);
if (reading == LOW && previous14 == HIGH && millis() - time > debounce)
{
if (state14 == HIGH){state14 = LOW;}
else {state14 = HIGH;}
time = millis();
}
digitalWrite(Relay_14, state14);
previous14 = reading;
//input 15
// all lights off, except
// relay_14 ON for 5 minutes (for test 5 seconds)
//reading = digitalRead(sw15);
if (digitalRead(sw15) == LOW )
{
starttijd = millis();
afsluiten();// ga naar subroutine voor doven lichten
}
}
void afsluiten()
{
digitalWrite(Relay_1,RELAY_OFF); state1=HIGH;
digitalWrite(Relay_2,RELAY_OFF); state2=HIGH;
digitalWrite(Relay_3,RELAY_OFF); state3=HIGH;
digitalWrite(Relay_4,RELAY_OFF); state4=HIGH;
digitalWrite(Relay_5,RELAY_OFF); state5=HIGH;
digitalWrite(Relay_6,RELAY_OFF); state6=HIGH;
digitalWrite(Relay_7,RELAY_OFF); state7=HIGH;
digitalWrite(Relay_8,RELAY_OFF); state8=HIGH;
digitalWrite(Relay_9,RELAY_OFF); state9=HIGH;
digitalWrite(Relay_10,RELAY_OFF); state10=HIGH;
digitalWrite(Relay_11,RELAY_OFF); state11=HIGH;
digitalWrite(Relay_12,RELAY_OFF); state12=HIGH;
digitalWrite(Relay_13,RELAY_OFF); state13=HIGH;
digitalWrite(Relay_14,RELAY_ON); //state15=LOW;
if ((millis()- starttijd) > 5000){digitalWrite(Relay_14,RELAY_OFF); } // relay 14 5 seconds on for test
}