const int buttonPin = 2; // Pin connected to the push button
const int numLEDs = 10; // Number of LEDs
const int ledPins[] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; // Pins connected to the LEDs
int buttonState = 0; // Variablr for reading the button status
int lastButtonState = 0; // Variable to store the last button state
int animationMode = 0; // Variable to store the current animation mode
void setup() {
// Initialize the LED pins as OUTPUT
for (int i = 0; i < numLEDs; i++){
pinMode(ledPins[i], OUTPUT);
}
//Initialize the button pin as INPUT
pinMode(buttonPin, INPUT);
}
void loop() {
// Read the state of the push button
buttonState = digitalRead(buttonPin);
// Check if the button is pressed
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
// Change the animation mode
animationMode = (animationMode + 1) % 3;
}
delay(50); // Debounce delay
}
lastButtonState = buttonState;
// Run the current animation mode
switch (animationMode) {
case 0:
knightRiderEffect();
break;
case 1:
blinkAllTogether();
break;
case 2:
waveEffect();
break;
}
}
void knightRiderEffect() {
// Forward direction
for (int i = 0; i < numLEDs; i++) {
digitalWrite(ledPins[i], HIGH);
delay(100);
digitalWrite(ledPins[i], LOW);
}
// Reverse direction
for (int i = numLEDs - 2; i >= 0; i--) {
digitalWrite(ledPins[i], HIGH);
delay(100);
digitalWrite(ledPins[i], LOW);
}
}
void blinkAllTogether() {
// Turn all LEDs on
for (int i = 0; i < numLEDs; i++) {
digitalWrite(ledPins[i], HIGH);
}
delay(500);
// Turn all LEDs off
for (int i = 0; i < numLEDs; i++) {
digitalWrite(ledPins[i], LOW);
}
delay(500);
}
void waveEffect() {
// Turn LEDs on one by one
for (int i = 0; i < numLEDs; i++) {
digitalWrite(ledPins[i], HIGH);
delay(300);
}
// Turn LEDs off one by one
for (int i = 0; i < numLEDs; i++) {
digitalWrite(ledPins[i], LOW);
delay(300);
}
}