All submissions

LED Blinking Patterns

Solving Approach

How do you plan to solve it?

 
 

 

 

 

Code

// 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("Button pushed, pattern now is: ");
    Serial.println(patternInEffect+1);
  }
  pattern[patternInEffect]();
}



 

 

 

Output

Video

Add a video of the output (know more)

 

 

 

 

Submit Your Solution

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