All submissions

LED Blinking Patterns

Solving Approach

How do you plan to solve it?

 
i used different function for each pattern, then call it in a loop each once the switch is changing its state

 

 

Code


#define LED1  8
#define LED2  11
#define LED3  12
#define LED4  9

#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("Current pattern ");
Serial.println(patternInEffect+1);
}
pattern[patternInEffect]();
}
                      



 

 

 

Output

Video

Add a video of the output (know more)

https://drive.google.com/file/d/1M-RPcGLkHs_zdh3PPcIl91sSZs7Coguz/view?usp=sharing

 

 

 

Submit Your Solution

Note: Once submitted, your solution goes public, helping others learn from your approach!