Bird
Raised Fist0
Arduinoprogramming~20 mins

Multiple LED and button control in Arduino - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Multiple LED and Button Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output on the LEDs?

Given the following Arduino code controlling two LEDs and two buttons, what will be the state of the LEDs after pressing button 1 once?

Arduino
const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int ledPin1 = 9;
const int ledPin2 = 10;

int buttonState1 = 0;
int buttonState2 = 0;

void setup() {
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(buttonPin1, INPUT_PULLUP);
  pinMode(buttonPin2, INPUT_PULLUP);
  digitalWrite(ledPin1, LOW);
  digitalWrite(ledPin2, LOW);
}

void loop() {
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);

  if (buttonState1 == LOW) {
    digitalWrite(ledPin1, HIGH);
  } else {
    digitalWrite(ledPin1, LOW);
  }

  if (buttonState2 == LOW) {
    digitalWrite(ledPin2, HIGH);
  } else {
    digitalWrite(ledPin2, LOW);
  }
}
ABoth LEDs OFF
BLED1 OFF, LED2 ON
CBoth LEDs ON
DLED1 ON, LED2 OFF
Attempts:
2 left
💡 Hint

Remember that the buttons use INPUT_PULLUP, so LOW means pressed.

Predict Output
intermediate
2:00remaining
What happens if both buttons are pressed simultaneously?

Using the same code as before, what will be the state of LED1 and LED2 if both buttons are pressed at the same time?

Arduino
const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int ledPin1 = 9;
const int ledPin2 = 10;

int buttonState1 = 0;
int buttonState2 = 0;

void setup() {
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(buttonPin1, INPUT_PULLUP);
  pinMode(buttonPin2, INPUT_PULLUP);
  digitalWrite(ledPin1, LOW);
  digitalWrite(ledPin2, LOW);
}

void loop() {
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);

  if (buttonState1 == LOW) {
    digitalWrite(ledPin1, HIGH);
  } else {
    digitalWrite(ledPin1, LOW);
  }

  if (buttonState2 == LOW) {
    digitalWrite(ledPin2, HIGH);
  } else {
    digitalWrite(ledPin2, LOW);
  }
}
ALED1 OFF, LED2 ON
BBoth LEDs ON
CLED1 ON, LED2 OFF
DBoth LEDs OFF
Attempts:
2 left
💡 Hint

Check the conditions for each LED separately.

🔧 Debug
advanced
2:00remaining
Why does LED2 never turn ON?

Consider this Arduino code snippet. LED1 works fine, but LED2 never turns ON even when button 2 is pressed. What is the cause?

Arduino
const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int ledPin1 = 9;
const int ledPin2 = 10;

void setup() {
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(buttonPin1, INPUT_PULLUP);
  // pinMode(buttonPin2, INPUT_PULLUP); // Missing this line
}

void loop() {
  int buttonState1 = digitalRead(buttonPin1);
  int buttonState2 = digitalRead(buttonPin2);

  if (buttonState1 == LOW) {
    digitalWrite(ledPin1, HIGH);
  } else {
    digitalWrite(ledPin1, LOW);
  }

  if (buttonState2 == LOW) {
    digitalWrite(ledPin2, HIGH);
  } else {
    digitalWrite(ledPin2, LOW);
  }
}
AbuttonPin2 is not set as INPUT_PULLUP, so it reads random values
BledPin2 is not set as OUTPUT
CbuttonPin1 and buttonPin2 pins are swapped
DdigitalWrite for ledPin2 uses wrong pin number
Attempts:
2 left
💡 Hint

Check the setup function for pin modes.

📝 Syntax
advanced
2:00remaining
Which option causes a syntax error?

Which of the following Arduino code snippets will cause a syntax error?

Aif buttonState == LOW { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); }
Bif (buttonState == LOW) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); }
Cif (buttonState == LOW) digitalWrite(ledPin, HIGH); else digitalWrite(ledPin, LOW);
Dif (buttonState == LOW) { digitalWrite(ledPin, HIGH); } else digitalWrite(ledPin, LOW);
Attempts:
2 left
💡 Hint

Check the syntax of the if statement in Arduino (C++).

🚀 Application
expert
3:00remaining
How many times will LED1 toggle after 5 button presses?

This Arduino code toggles LED1 each time button 1 is pressed. How many times will LED1 change state after pressing button 1 exactly 5 times?

Arduino
const int buttonPin1 = 2;
const int ledPin1 = 9;

int ledState = LOW;
int lastButtonState = HIGH;

void setup() {
  pinMode(ledPin1, OUTPUT);
  pinMode(buttonPin1, INPUT_PULLUP);
  digitalWrite(ledPin1, ledState);
}

void loop() {
  int buttonState = digitalRead(buttonPin1);

  if (lastButtonState == HIGH && buttonState == LOW) {
    ledState = !ledState;
    digitalWrite(ledPin1, ledState);
  }

  lastButtonState = buttonState;
}
A1 time
B10 times
C5 times
D0 times
Attempts:
2 left
💡 Hint

Consider how the code detects button presses using state changes.

Practice

(1/5)
1. What is the main advantage of using arrays to control multiple LEDs and buttons in Arduino?
easy
A. It allows controlling many LEDs and buttons efficiently with loops.
B. It makes the LEDs brighter.
C. It reduces the power consumption of the Arduino.
D. It automatically fixes wiring errors.

Solution

  1. Step 1: Understand arrays usage

    Arrays store multiple pin numbers for LEDs and buttons in one place.
  2. Step 2: Use loops for control

    Loops can iterate over arrays to read buttons and control LEDs easily.
  3. Final Answer:

    It allows controlling many LEDs and buttons efficiently with loops. -> Option A
  4. Quick Check:

    Arrays + loops = efficient control [OK]
Hint: Think how arrays help repeat actions for many pins [OK]
Common Mistakes:
  • Thinking arrays make LEDs brighter
  • Confusing arrays with power saving
  • Assuming arrays fix wiring automatically
2. Which Arduino pin mode is best to use for buttons to avoid external resistors?
easy
A. OUTPUT
B. INPUT_PULLUP
C. INPUT
D. ANALOG

Solution

  1. Step 1: Recall button wiring

    Buttons need a way to avoid floating input pins, usually with pull-up resistors.
  2. Step 2: Use built-in pull-up

    INPUT_PULLUP mode activates Arduino's internal pull-up resistor, no external resistor needed.
  3. Final Answer:

    INPUT_PULLUP -> Option B
  4. Quick Check:

    Button mode = INPUT_PULLUP [OK]
Hint: Use INPUT_PULLUP to simplify button wiring [OK]
Common Mistakes:
  • Using OUTPUT mode for buttons
  • Forgetting pull-up resistor causes unstable reads
  • Using ANALOG mode for digital buttons
3. What will be the output on the LEDs if the following code runs and button 2 is pressed?
const int buttonPins[] = {2, 3, 4};
const int ledPins[] = {8, 9, 10};

void setup() {
  for (int i = 0; i < 3; i++) {
    pinMode(buttonPins[i], INPUT_PULLUP);
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  for (int i = 0; i < 3; i++) {
    if (digitalRead(buttonPins[i]) == LOW) {
      digitalWrite(ledPins[i], HIGH);
    } else {
      digitalWrite(ledPins[i], LOW);
    }
  }
}
medium
A. Only LED on pin 8 turns ON.
B. All LEDs turn ON.
C. Only LED on pin 9 turns ON.
D. No LEDs turn ON.

Solution

  1. Step 1: Identify button pressed

    Button 2 is pressed, which is buttonPins[1] (pin 3).
  2. Step 2: Match LED to button

    LED on ledPins[1] (pin 9) turns ON because buttonPins[1] is LOW.
  3. Final Answer:

    Only LED on pin 9 turns ON. -> Option C
  4. Quick Check:

    Button 2 pressed lights LED 9 [OK]
Hint: Match button index to LED index in arrays [OK]
Common Mistakes:
  • Assuming all LEDs turn on when one button pressed
  • Confusing pin numbers with array indexes
  • Ignoring INPUT_PULLUP logic (LOW means pressed)
4. The following code is intended to turn ON an LED when its matching button is pressed, but the LED never lights up. What is the error?
const int buttonPins[] = {2, 3};
const int ledPins[] = {8, 9};

void setup() {
  for (int i = 0; i <= 2; i++) {
    pinMode(buttonPins[i], INPUT_PULLUP);
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  for (int i = 0; i <= 2; i++) {
    if (digitalRead(buttonPins[i]) == LOW) {
      digitalWrite(ledPins[i], HIGH);
    } else {
      digitalWrite(ledPins[i], LOW);
    }
  }
}
medium
A. digitalRead should be replaced with analogRead.
B. Buttons should be set as OUTPUT, not INPUT_PULLUP.
C. LED pins should be set as INPUT.
D. The for loops use <= 2 instead of < 2, causing out-of-bounds access.

Solution

  1. Step 1: Check loop conditions

    Loops run from i = 0 to i <= 2, which means i = 0,1,2 (3 iterations).
  2. Step 2: Check array sizes

    buttonPins and ledPins have only 2 elements (indexes 0 and 1). Accessing index 2 causes error.
  3. Final Answer:

    The for loops use <= 2 instead of < 2, causing out-of-bounds access. -> Option D
  4. Quick Check:

    Loop index out of range causes failure [OK]
Hint: Use < array length, not <=, in loops over arrays [OK]
Common Mistakes:
  • Using <= instead of < in loops
  • Setting button pins as OUTPUT
  • Confusing digitalRead with analogRead
5. You want to control 4 LEDs with 4 buttons so that pressing a button toggles its LED ON or OFF (not just ON while pressed). Which approach is best to implement this behavior?
hard
A. Use arrays for pins and track LED states in a separate boolean array, toggling state on button press detection.
B. Use digitalWrite to turn LED ON when button is pressed and OFF otherwise.
C. Use INPUT mode for buttons and analogWrite for LEDs.
D. Connect LEDs directly to buttons without Arduino code.

Solution

  1. Step 1: Understand toggle behavior

    Toggle means LED changes state only when button is pressed, not continuously.
  2. Step 2: Track LED states

    Store LED ON/OFF states in a boolean array and change state only on button press event.
  3. Step 3: Use arrays for pins

    Arrays help manage multiple buttons and LEDs efficiently with loops.
  4. Final Answer:

    Use arrays for pins and track LED states in a separate boolean array, toggling state on button press detection. -> Option A
  5. Quick Check:

    Toggle needs state tracking + arrays [OK]
Hint: Track LED states in array to toggle on button press [OK]
Common Mistakes:
  • Turning LED ON only while button pressed
  • Using analogWrite for simple ON/OFF LEDs
  • Wiring LEDs directly to buttons without control