How do you plan to solve it?
Create function for each pattern
decalre interrupt to detect switch changes
create software debouncing of switch
// C++ code
//
#define LED1 3
#define LED2 4
#define LED3 5
#define LED4 6
#define INTRPIN 2
#define theDelay 500
void pattern1()
{
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
delay(theDelay);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
delay(theDelay);
}
void pattern2()
{
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, LOW);
delay(theDelay);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
digitalWrite(LED4, HIGH);
delay(theDelay);
}
void pattern3()
{
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
delay(theDelay);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
delay(theDelay);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, LOW);
delay(theDelay);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, HIGH);
delay(theDelay);
}
void pattern4()
{
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
delay(theDelay);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
delay(theDelay);
}
void pattern5()
{
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, HIGH);
delay(theDelay);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, LOW);
delay(theDelay);
}
#define PATTERNS 5
typedef void (*func_ptr)();
func_ptr pattern[PATTERNS]={pattern1, pattern2, pattern3, pattern4, pattern5};
int patternInEffect= 0;
int buttonStateChanged = 0;
long lastChange=0;
#define DebounceTime 100
void myISR()
{
buttonStateChanged = 1;
}
void setup()
{
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(INTRPIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(INTRPIN), myISR, CHANGE);
Serial.begin(9600);
}
bool debouncedPress() {
if (buttonStateChanged == 1) {
if ((millis() - lastChange) >= DebounceTime) {
lastChange = millis();
return true;
}
else {
lastChange = millis();
return false;
}
}
else {
return false;
}
}
void loop()
{
if (debouncedPress()) {
patternInEffect= (patternInEffect +1) % PATTERNS;
buttonStateChanged=0;
Serial.print("flag raised, pattern now is: ");
Serial.println(patternInEffect+1);
}
pattern[patternInEffect]();
}
Add a video of the output (know more)