0
0
Embedded Cprogramming~20 mins

Reading digital input pin state in Embedded C - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Digital Input Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of reading a digital input pin?
Consider the following embedded C code snippet that reads a digital input pin connected to a button. What value will be printed if the button is pressed (assuming active HIGH)?
Embedded C
#include <stdio.h>
#define BUTTON_PIN 2

int digitalRead(int pin) {
    // Simulated hardware input: returns 1 if pressed, 0 if not
    if (pin == BUTTON_PIN) return 1;
    return 0;
}

int main() {
    int buttonState = digitalRead(BUTTON_PIN);
    printf("Button state: %d\n", buttonState);
    return 0;
}
AButton state: 1
BButton state: 0
CButton state: -1
DCompilation error
Attempts:
2 left
💡 Hint
Think about what digitalRead returns when the button is pressed.
Predict Output
intermediate
2:00remaining
What happens if you read an unconfigured input pin?
Given this code snippet, what output will it produce if the input pin is not configured and floating?
Embedded C
#include <stdio.h>
#define INPUT_PIN 5

int digitalRead(int pin) {
    // Simulate floating pin returns random 0 or 1
    if (pin == INPUT_PIN) return 0; // Simulated as LOW
    return 1;
}

int main() {
    int state = digitalRead(INPUT_PIN);
    printf("Pin state: %d\n", state);
    return 0;
}
APin state: 1
BRuntime error
CPin state: 0
DPin state: -1
Attempts:
2 left
💡 Hint
Floating pins often read as LOW or unpredictable, here simulated as LOW.
🔧 Debug
advanced
2:30remaining
Why does this code always print 0 for the input pin?
Find the bug in this code that causes the input pin state to always print 0, even when the button is pressed.
Embedded C
#include <stdio.h>
#define BUTTON_PIN 3

int digitalRead(int pin) {
    if (pin == BUTTON_PIN) return 1;
    return 0;
}

int main() {
    int buttonState = 0;
    if (BUTTON_PIN = 3) {
        buttonState = digitalRead(BUTTON_PIN);
    }
    printf("Button state: %d\n", buttonState);
    return 0;
}
AThe condition uses assignment '=' instead of comparison '==', so it always evaluates true but BUTTON_PIN is changed.
BdigitalRead always returns 0 for BUTTON_PIN 3.
CbuttonState is never assigned any value.
DMissing semicolon after digitalRead call.
Attempts:
2 left
💡 Hint
Check the if condition syntax carefully.
🧠 Conceptual
advanced
1:30remaining
What is the effect of enabling pull-up resistor on a digital input pin?
In embedded systems, enabling an internal pull-up resistor on a digital input pin means:
AThe pin is connected internally to ground, so it reads LOW when not pressed.
BThe pin is connected internally to a high voltage, so it reads HIGH when not pressed.
CThe pin is disconnected internally, so it floats and reads random values.
DThe pin output is driven HIGH constantly.
Attempts:
2 left
💡 Hint
Pull-up resistors pull the pin voltage up to a high level when no external signal is applied.
Predict Output
expert
3:00remaining
What is the output of this code reading multiple digital input pins?
Given the following code that reads three digital input pins and prints their states, what is the output?
Embedded C
#include <stdio.h>

int digitalRead(int pin) {
    switch(pin) {
        case 1: return 0;
        case 2: return 1;
        case 3: return 1;
        default: return -1;
    }
}

int main() {
    int states[3];
    for (int i = 0; i < 3; i++) {
        states[i] = digitalRead(i + 1);
    }
    printf("States: %d %d %d\n", states[0], states[1], states[2]);
    return 0;
}
AStates: 1 0 1
BStates: -1 -1 -1
CStates: 1 1 0
DStates: 0 1 1
Attempts:
2 left
💡 Hint
Check the digitalRead return values for each pin number.