11. LED Blinking Patterns

Back To All Submissions
Previous Submission
Next Submission

Solving Approach

How do you plan to solve it?

 Create function for each pattern

decalre interrupt to detect switch changes

create software debouncing of switch


 

 

 

 

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


 

 

 

Output

Video

Add a video of the output (know more)

 

 

 

Was this helpful?
Upvote
Downvote