Greetings All,
I'm trying to put together a multi-mode Christmas light controller.
Currently I have the wiring and sketch working, but I do have one issue.
It can sometimes take several button presses in order for the mode to change. It's almost as if I have to perfectly time the button press. Is there anything I can do to remove this problem?
//original code by jgueydan
//modified to suit
//Multi-Mode Christmas light controller
//Ver 1.0 basic modes
int counter = 1; //starting mode
int switchPin = A0;
int ch1 = 2;
int ch2 = 3;
int ch3 = 4;
int ch4 = 5;
int ch5 = 6;
int ch6 = 7;
int ch7 = 8;
int ch8 = 9;
int ch9 = 10;
int ch10 = 11;
int ch11 = 12;
int ch12 = 13;
void setup()
{
pinMode(A0, INPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
//Handle input
int switchVal = digitalRead(switchPin);
if(switchVal == HIGH)
{
delay(500);
counter ++;
//Reset count if over max mode number
if(counter == 8)
{
counter = 1;
}
}
else
//Change mode
switch (counter) {
case 1: //all off
digitalWrite(ch1, LOW);
digitalWrite(ch2, LOW);
digitalWrite(ch3, LOW);
digitalWrite(ch4, LOW);
digitalWrite(ch5, LOW);
digitalWrite(ch6, LOW);
digitalWrite(ch7, LOW);
digitalWrite(ch8, LOW);
digitalWrite(ch9, LOW);
digitalWrite(ch10, LOW);
digitalWrite(ch11, LOW);
digitalWrite(ch12, LOW);
break;
case 2: //all on
digitalWrite(ch1, HIGH);
digitalWrite(ch2, HIGH);
digitalWrite(ch3, HIGH);
digitalWrite(ch4, HIGH);
digitalWrite(ch5, HIGH);
digitalWrite(ch6, HIGH);
digitalWrite(ch7, HIGH);
digitalWrite(ch8, HIGH);
digitalWrite(ch9, HIGH);
digitalWrite(ch10, HIGH);
digitalWrite(ch11, HIGH);
digitalWrite(ch12, HIGH);
break;
case 3: //slow blink
digitalWrite(ch1, HIGH);
digitalWrite(ch2, HIGH);
digitalWrite(ch3, HIGH);
digitalWrite(ch4, HIGH);
digitalWrite(ch5, HIGH);
digitalWrite(ch6, HIGH);
digitalWrite(ch7, HIGH);
digitalWrite(ch8, HIGH);
digitalWrite(ch9, HIGH);
digitalWrite(ch10, HIGH);
digitalWrite(ch11, HIGH);
digitalWrite(ch12, HIGH);
delay(1000);
digitalWrite(ch1, LOW);
digitalWrite(ch2, LOW);
digitalWrite(ch3, LOW);
digitalWrite(ch4, LOW);
digitalWrite(ch5, LOW);
digitalWrite(ch6, LOW);
digitalWrite(ch7, LOW);
digitalWrite(ch8, LOW);
digitalWrite(ch9, LOW);
digitalWrite(ch10, LOW);
digitalWrite(ch11, LOW);
digitalWrite(ch12, LOW);
delay(1000);
break;
case 4: //fast blink
digitalWrite(ch1, HIGH);
digitalWrite(ch2, HIGH);
digitalWrite(ch3, HIGH);
digitalWrite(ch4, HIGH);
digitalWrite(ch5, HIGH);
digitalWrite(ch6, HIGH);
digitalWrite(ch7, HIGH);
digitalWrite(ch8, HIGH);
digitalWrite(ch9, HIGH);
digitalWrite(ch10, HIGH);
digitalWrite(ch11, HIGH);
digitalWrite(ch12, HIGH);
delay(500);
digitalWrite(ch1, LOW);
digitalWrite(ch2, LOW);
digitalWrite(ch3, LOW);
digitalWrite(ch4, LOW);
digitalWrite(ch5, LOW);
digitalWrite(ch6, LOW);
digitalWrite(ch7, LOW);
digitalWrite(ch8, LOW);
digitalWrite(ch9, LOW);
digitalWrite(ch10, LOW);
digitalWrite(ch11, LOW);
digitalWrite(ch12, LOW);
delay(500);
break;
case 5: //slow chase
digitalWrite(ch1, HIGH);
delay(250);
digitalWrite(ch1, LOW);
digitalWrite(ch2, HIGH);
delay(250);
digitalWrite(ch2, LOW);
digitalWrite(ch3, HIGH);
delay(250);
digitalWrite(ch3, LOW);
digitalWrite(ch4, HIGH);
delay(250);
digitalWrite(ch4, LOW);
digitalWrite(ch5, HIGH);
delay(250);
digitalWrite(ch5, LOW);
digitalWrite(ch6, HIGH);
delay(250);
digitalWrite(ch6, LOW);
digitalWrite(ch7, HIGH);
delay(250);
digitalWrite(ch7, LOW);
digitalWrite(ch8, HIGH);
delay(250);
digitalWrite(ch8, LOW);
digitalWrite(ch9, HIGH);
delay(250);
digitalWrite(ch9, LOW);
digitalWrite(ch10, HIGH);
delay(250);
digitalWrite(ch10, LOW);
digitalWrite(ch11, HIGH);
delay(250);
digitalWrite(ch11, LOW);
digitalWrite(ch12, HIGH);
delay(250);
digitalWrite(ch12, LOW);
break;
case 6: //fast chase
digitalWrite(ch1, HIGH);
delay(100);
digitalWrite(ch1, LOW);
digitalWrite(ch2, HIGH);
delay(100);
digitalWrite(ch2, LOW);
digitalWrite(ch3, HIGH);
delay(100);
digitalWrite(ch3, LOW);
digitalWrite(ch4, HIGH);
delay(100);
digitalWrite(ch4, LOW);
digitalWrite(ch5, HIGH);
delay(100);
digitalWrite(ch5, LOW);
digitalWrite(ch6, HIGH);
delay(100);
digitalWrite(ch6, LOW);
digitalWrite(ch7, HIGH);
delay(100);
digitalWrite(ch7, LOW);
digitalWrite(ch8, HIGH);
delay(100);
digitalWrite(ch8, LOW);
digitalWrite(ch9, HIGH);
delay(100);
digitalWrite(ch9, LOW);
digitalWrite(ch10, HIGH);
delay(100);
digitalWrite(ch10, LOW);
digitalWrite(ch11, HIGH);
delay(100);
digitalWrite(ch11, LOW);
digitalWrite(ch12, HIGH);
delay(100);
digitalWrite(ch12, LOW);
delay(250);
break;
case 7:
break;
}
}