Bird
Raised Fist0
Embedded Cprogramming~10 mins

Reading digital input pin state in Embedded C - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Reading digital input pin state
Start
↓
Configure pin as input
↓
Read pin state
↓
Check if HIGH or LOW
↓
If HIGH
→Do something
↓
If LOW
→Do something else
↓
End or Repeat
The program sets a pin as input, reads its state (HIGH or LOW), then acts based on that state.
Execution Sample
Embedded C
pinMode(2, INPUT);
int state = digitalRead(2);
if(state == HIGH) {
  // do something
} else {
  // do something else
}
This code sets pin 2 as input, reads its state, and runs code depending on whether the pin is HIGH or LOW.
Execution Table
StepActionPin ModePin State ReadConditionBranch TakenOutput/Effect
1Set pin 2 mode to INPUTINPUTN/AN/AN/APin 2 ready for input
2Read digital state of pin 2INPUTHIGHstate == HIGH?YesExecute HIGH branch
3Execute HIGH branchINPUTHIGHN/AN/ADo something (e.g., turn LED on)
4End or repeatINPUTHIGHN/AN/AProgram waits or loops
5If pin state was LOWINPUTLOWstate == HIGH?NoExecute LOW branch
6Execute LOW branchINPUTLOWN/AN/ADo something else (e.g., turn LED off)
7End or repeatINPUTLOWN/AN/AProgram waits or loops
💡 Program stops or repeats after reading and acting on pin state
Variable Tracker
VariableStartAfter Step 2After Step 5Final
pin 2 modeUndefinedINPUTINPUTINPUT
stateUndefinedHIGHLOWDepends on pin reading
Key Moments - 3 Insights
Why do we need to set the pin mode to INPUT before reading?
Because the microcontroller needs to know the pin is for input, not output. Step 1 in the execution_table shows setting pinMode to INPUT before reading the state.
What does digitalRead return if the pin is not connected?
It may return LOW or unpredictable values. The execution_table rows 2 and 5 show reading HIGH or LOW, but if floating, the value can be unstable.
Why do we check if state == HIGH instead of just using the value directly?
Because digitalRead returns either HIGH or LOW constants. Step 2 and 5 in the table show the condition check to decide which branch to take.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the pin state read at Step 2?
ALOW
BINPUT
CHIGH
DUndefined
💡 Hint
Check the 'Pin State Read' column at Step 2 in the execution_table.
At which step does the program decide to execute the LOW branch?
AStep 5
BStep 2
CStep 3
DStep 1
💡 Hint
Look at the 'Branch Taken' column where condition 'state == HIGH?' is No.
If we forget to set pinMode to INPUT, what would likely happen?
AdigitalRead will always return HIGH
BdigitalRead may return unpredictable values
CPin will automatically be input
DProgram will not compile
💡 Hint
Refer to key_moments about why setting pinMode is important.
Concept Snapshot
Set pin mode to INPUT before reading.
Use digitalRead(pin) to get HIGH or LOW.
Check if state == HIGH to decide action.
Without setting INPUT, readings may be wrong.
Repeat reading as needed in loop.
Full Transcript
This program starts by setting a pin as input so the microcontroller knows to listen to signals on that pin. Then it reads the pin's digital state, which can be HIGH or LOW. Based on the reading, it decides which code branch to run, for example turning an LED on or off. The execution table shows each step: setting pin mode, reading state, checking condition, and acting accordingly. Variables like pinMode and state change as the program runs. Beginners often wonder why setting pin mode is needed and what happens if it's skipped. The quiz questions help check understanding of pin state reading and decision making.

Practice

(1/5)
1. What does the function digitalRead(pin) do in embedded C programming?
easy
A. Configures the pin as an analog input.
B. Sets the digital pin to output mode.
C. Reads the current state (HIGH or LOW) of a digital input pin.
D. Writes a HIGH signal to a digital pin.

Solution

  1. Step 1: Understand the purpose of digitalRead

    The function digitalRead(pin) is used to check the current electrical state of a digital input pin, which can be either HIGH (on) or LOW (off).
  2. Step 2: Differentiate from other pin functions

    Unlike functions that set pin modes or write signals, digitalRead only reads the pin's state without changing it.
  3. Final Answer:

    Reads the current state (HIGH or LOW) of a digital input pin. -> Option C
  4. Quick Check:

    digitalRead reads pin state = D [OK]
Hint: digitalRead always reads input pin state, not sets it [OK]
Common Mistakes:
  • Confusing digitalRead with pinMode or digitalWrite
  • Thinking digitalRead sets pin mode
  • Assuming digitalRead writes output signals
2. Which of the following is the correct way to set a pin as input before reading its state?
easy
A. pinMode(pin, OUTPUT);
B. pinMode(pin, INPUT);
C. digitalRead(pin);
D. digitalWrite(pin, HIGH);

Solution

  1. Step 1: Identify the function to set pin mode

    pinMode(pin, mode) is used to configure a pin as INPUT or OUTPUT.
  2. Step 2: Choose the correct mode for reading input

    To read a digital input pin, it must be set as INPUT using pinMode(pin, INPUT).
  3. Final Answer:

    pinMode(pin, INPUT); -> Option B
  4. Quick Check:

    Set pin as INPUT before reading = A [OK]
Hint: Use pinMode(pin, INPUT) before digitalRead [OK]
Common Mistakes:
  • Setting pin as OUTPUT before reading input
  • Calling digitalRead before setting pin mode
  • Using digitalWrite to set pin mode
3. What will be the output of the following code snippet if the button connected to pin 7 is pressed (assuming pressed means HIGH)?
pinMode(7, INPUT);
int buttonState = digitalRead(7);
if (buttonState == HIGH) {
    printf("Button is pressed\n");
} else {
    printf("Button is not pressed\n");
}
medium
A. Button is pressed
B. Button is not pressed
C. Compilation error
D. No output

Solution

  1. Step 1: Analyze pin mode and reading

    The pin 7 is set as INPUT, so digitalRead(7) correctly reads the pin state.
  2. Step 2: Check condition for pressed button

    If the button is pressed, the pin reads HIGH, so the if condition is true and prints "Button is pressed".
  3. Final Answer:

    Button is pressed -> Option A
  4. Quick Check:

    Pressed button = HIGH = prints pressed [OK]
Hint: Pressed button means digitalRead returns HIGH [OK]
Common Mistakes:
  • Forgetting to set pinMode before reading
  • Confusing HIGH and LOW states
  • Assuming digitalRead returns boolean true/false
4. Identify the error in the following code that reads a digital input pin state:
int pin = 5;
int state;
state = digitalRead();
if(state == HIGH) {
    // do something
}
medium
A. Pin should be set as OUTPUT before reading.
B. The if condition syntax is incorrect.
C. digitalRead returns a float, not int.
D. Missing pin number argument in digitalRead function.

Solution

  1. Step 1: Check digitalRead usage

    digitalRead requires the pin number as an argument, but here it is called without any argument.
  2. Step 2: Verify other parts of code

    Pin mode setting is missing but not the main error asked; the if condition syntax is correct.
  3. Final Answer:

    Missing pin number argument in digitalRead function. -> Option D
  4. Quick Check:

    digitalRead needs pin argument = B [OK]
Hint: digitalRead always needs pin number inside parentheses [OK]
Common Mistakes:
  • Calling digitalRead without pin argument
  • Setting pin as OUTPUT before reading input
  • Misunderstanding return type of digitalRead
5. You want to detect if a switch connected to pin 3 is ON and turn on an LED connected to pin 13 accordingly. Which code snippet correctly reads the switch state and controls the LED?
hard
A. pinMode(3, INPUT); pinMode(13, OUTPUT); if (digitalRead(3) == HIGH) { digitalWrite(13, HIGH); } else { digitalWrite(13, LOW); }
B. pinMode(3, OUTPUT); pinMode(13, INPUT); if (digitalRead(13) == HIGH) { digitalWrite(3, HIGH); }
C. pinMode(3, INPUT); if (digitalRead(13) == HIGH) { digitalWrite(3, HIGH); }
D. pinMode(13, OUTPUT); digitalWrite(3, HIGH); if (digitalRead(3) == HIGH) { digitalWrite(13, HIGH); }

Solution

  1. Step 1: Set correct pin modes

    Pin 3 is input for the switch, so pinMode(3, INPUT). Pin 13 is output for the LED, so pinMode(13, OUTPUT).
  2. Step 2: Read switch and control LED

    If digitalRead(3) is HIGH (switch ON), turn LED on with digitalWrite(13, HIGH), else turn it off with digitalWrite(13, LOW).
  3. Final Answer:

    pinMode(3, INPUT); pinMode(13, OUTPUT); if (digitalRead(3) == HIGH) { digitalWrite(13, HIGH); } else { digitalWrite(13, LOW); } -> Option A
  4. Quick Check:

    Input pin read controls output pin write = A [OK]
Hint: Input pin set INPUT, output pin set OUTPUT, read then write [OK]
Common Mistakes:
  • Setting input pin as OUTPUT or vice versa
  • Reading wrong pin for switch state
  • Not controlling LED pin properly
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard