Bird
Raised Fist0
Arduinoprogramming~10 mins

digitalRead() for input reading in Arduino - Step-by-Step Execution

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
Concept Flow - digitalRead() for input reading
Setup pin as INPUT
Call digitalRead(pin)
Read voltage level
Return HIGH or LOW
Use value in program
This flow shows how Arduino reads a digital input pin: first set the pin mode, then read the voltage level, and finally get HIGH or LOW as the result.
Execution Sample
Arduino
pinMode(2, INPUT);
int buttonState = digitalRead(2);
if (buttonState == HIGH) {
  // do something
}
This code sets pin 2 as input, reads its state, and checks if it is HIGH.
Execution Table
StepActionPin ModedigitalRead(pin)Returned ValueProgram Use
1Set pin 2 modeINPUTN/AN/APin 2 ready for input
2Call digitalRead(2)INPUTRead voltage on pin 2HIGHbuttonState = HIGH
3Check if buttonState == HIGHINPUTN/AHIGHCondition true, enter if-block
4Execute if-blockINPUTN/AN/APerform action for button pressed
5EndINPUTN/AN/AProgram continues
💡 digitalRead returns HIGH because pin 2 voltage is high, so if condition is true and code inside runs
Variable Tracker
VariableStartAfter digitalReadAfter if checkFinal
buttonStateundefinedHIGHHIGHHIGH
Key Moments - 3 Insights
Why do we need to set pinMode to INPUT before digitalRead?
Setting pinMode to INPUT configures the pin to read voltage levels correctly. Without it, digitalRead may not return the correct HIGH or LOW value (see execution_table step 1).
What does digitalRead actually return?
digitalRead returns either HIGH or LOW depending on the voltage level on the pin at the moment of reading (see execution_table step 2).
Why does the if condition check buttonState == HIGH?
Because digitalRead returns HIGH when the input voltage is high, the if condition uses this to decide if the button is pressed (see execution_table step 3).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of buttonState after digitalRead is called?
Aundefined
BHIGH
CLOW
DINPUT
💡 Hint
Check the 'Returned Value' and 'buttonState' columns at step 2 in the execution_table.
At which step does the program decide to enter the if-block?
AStep 3
BStep 1
CStep 2
DStep 4
💡 Hint
Look at the 'Program Use' column in execution_table where the condition is checked.
If pinMode was not set to INPUT, how would digitalRead behave?
AIt would cause a compile error
BIt would still return correct HIGH or LOW
CIt might return incorrect or unpredictable values
DIt would always return LOW
💡 Hint
Refer to key_moments about the importance of setting pinMode before reading.
Concept Snapshot
digitalRead(pin) reads the voltage on a digital pin.
Set pinMode(pin, INPUT) first to prepare the pin.
digitalRead returns HIGH if voltage is high, LOW if low.
Use the returned value to check button presses or sensor states.
Always configure pins before reading to get reliable results.
Full Transcript
This visual execution shows how Arduino reads a digital input using digitalRead(). First, the pin mode is set to INPUT to prepare the pin for reading voltage. Then digitalRead(pin) reads the voltage level on the pin and returns HIGH or LOW. The returned value is stored in a variable, here buttonState. The program then checks if buttonState is HIGH to decide if a button is pressed and runs code accordingly. The variable tracker shows buttonState changes from undefined to HIGH after reading. Key moments explain why setting pinMode is necessary and what digitalRead returns. The quiz tests understanding of variable values and flow steps. This helps beginners see exactly how digitalRead works step-by-step.

Practice

(1/5)
1. What does the digitalRead() function do in Arduino?
easy
A. Sets a digital pin to HIGH or LOW
B. Reads the voltage level (HIGH or LOW) from a digital input pin
C. Configures a pin as an output
D. Reads analog voltage from a pin

Solution

  1. Step 1: Understand the purpose of digitalRead()

    The function digitalRead() checks the voltage level on a digital pin and returns HIGH or LOW.
  2. Step 2: Differentiate from other functions

    Unlike digitalWrite() which sets pin output, digitalRead() only reads input state.
  3. Final Answer:

    Reads the voltage level (HIGH or LOW) from a digital input pin -> Option B
  4. Quick Check:

    digitalRead() reads pin state [OK]
Hint: digitalRead() always reads input pin state [OK]
Common Mistakes:
  • Confusing digitalRead() with digitalWrite()
  • Thinking digitalRead() sets pin output
  • Mixing digitalRead() with analogRead()
2. Which of the following is the correct syntax to read a digital pin 7 in Arduino?
easy
A. digitalReadPin(7);
B. digitalRead = 7;
C. digitalRead(7);
D. readDigital(7);

Solution

  1. Step 1: Recall the correct function syntax

    The correct function call is digitalRead(pinNumber); where pinNumber is the pin to read.
  2. Step 2: Check each option

    Only digitalRead(7); matches the correct syntax digitalRead(7); others are invalid function calls or assignments.
  3. Final Answer:

    digitalRead(7); -> Option C
  4. Quick Check:

    Correct function call [OK]
Hint: digitalRead(pinNumber) reads pin state correctly [OK]
Common Mistakes:
  • Using assignment instead of function call
  • Wrong function name like readDigital()
  • Adding extra words like digitalReadPin()
3. What will be the output on the Serial Monitor if the button connected to pin 2 is pressed (assuming HIGH when pressed)?
void setup() {
  pinMode(2, INPUT);
  Serial.begin(9600);
}

void loop() {
  int buttonState = digitalRead(2);
  Serial.println(buttonState);
  delay(500);
}
medium
A. 1
B. Error: pinMode missing
C. 0
D. Random values

Solution

  1. Step 1: Analyze pinMode and digitalRead usage

    Pin 2 is set as INPUT, so digitalRead(2) reads the button state correctly.
  2. Step 2: Understand button press state

    When the button is pressed, the pin reads HIGH which is 1, so Serial.println prints 1 repeatedly.
  3. Final Answer:

    1 -> Option A
  4. Quick Check:

    Pressed button = HIGH = 1 [OK]
Hint: Pressed button reads HIGH (1) on digitalRead() [OK]
Common Mistakes:
  • Assuming pressed button reads 0 instead of 1
  • Forgetting to set pinMode to INPUT
  • Confusing analogRead with digitalRead
4. Identify the error in this code snippet that reads a button state on pin 4:
void setup() {
  Serial.begin(9600);
}

void loop() {
  int state = digitalRead(4);
  Serial.println(state);
  delay(1000);
}
medium
A. delay() cannot be used with digitalRead()
B. digitalRead() cannot be used in loop()
C. Serial.begin() should be in loop()
D. Missing pinMode(4, INPUT) in setup()

Solution

  1. Step 1: Check pin configuration

    The code does not set pin 4 as INPUT using pinMode(), which is required before reading.
  2. Step 2: Verify other parts

    digitalRead() can be used in loop(), Serial.begin() must be in setup(), and delay() is allowed.
  3. Final Answer:

    Missing pinMode(4, INPUT) in setup() -> Option D
  4. Quick Check:

    Always set pinMode before digitalRead() [OK]
Hint: Always set pinMode(INPUT) before digitalRead() [OK]
Common Mistakes:
  • Forgetting pinMode() setup
  • Moving Serial.begin() to loop() incorrectly
  • Thinking delay() breaks digitalRead()
5. You want to detect if a switch connected to pin 3 is pressed, but the switch is wired so it connects the pin to GND when pressed (active LOW). Which code snippet correctly reads the switch state and prints "Pressed" or "Not Pressed" accordingly? A)
pinMode(3, INPUT);
if (digitalRead(3) == HIGH) {
  Serial.println("Pressed");
} else {
  Serial.println("Not Pressed");
}
B)
pinMode(3, INPUT);
if (digitalRead(3) == LOW) {
  Serial.println("Pressed");
} else {
  Serial.println("Not Pressed");
}
C)
pinMode(3, OUTPUT);
if (digitalRead(3) == LOW) {
  Serial.println("Pressed");
} else {
  Serial.println("Not Pressed");
}
D)
pinMode(3, INPUT_PULLUP);
if (digitalRead(3) == HIGH) {
  Serial.println("Pressed");
} else {
  Serial.println("Not Pressed");
}
hard
A. Code snippet B
B. Code snippet A
C. Code snippet C
D. Code snippet D

Solution

  1. Step 1: Understand active LOW switch wiring

    The switch connects pin 3 to GND when pressed, so digitalRead(3) returns LOW when pressed.
  2. Step 2: Check pinMode and condition

    pinMode must be INPUT (not OUTPUT). The condition to detect press is digitalRead(3) == LOW.
  3. Final Answer:

    Code snippet B -> Option A
  4. Quick Check:

    Active LOW switch reads LOW when pressed [OK]
Hint: Active LOW means pressed when digitalRead() returns LOW [OK]
Common Mistakes:
  • Using OUTPUT mode instead of INPUT
  • Checking for HIGH instead of LOW for active LOW switch
  • Using INPUT_PULLUP but checking wrong logic