Offline
Newbie
Karma: 0
Posts: 17
|
 |
« on: January 22, 2013, 04:52:25 am » |
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 }
|