Bird
Raised Fist0
Embedded Cprogramming~15 mins

Reading digital input pin state in Embedded C - Mini Project: Build & Apply

Choose your learning style10 modes available
Reading digital input pin state
📖 Scenario: You are working with a microcontroller to read the state of a button connected to a digital input pin. The button can be pressed or released, and you want to detect its current state in your program.
🎯 Goal: Build a simple embedded C program that reads the digital input pin state of a button and prints whether the button is pressed or released.
📋 What You'll Learn
Create a variable to represent the digital input pin state.
Create a variable to represent the button pin number.
Read the digital input pin state using a function call.
Print the button state as 'Pressed' or 'Released'.
💡 Why This Matters
🌍 Real World
Reading digital input pins is essential in embedded systems to detect button presses, switches, or sensor signals.
💼 Career
Embedded software developers often need to read hardware pin states to interact with physical devices and control systems.
Progress0 / 4 steps
1
Setup button pin number variable
Create an integer variable called buttonPin and set it to 2 to represent the digital input pin number where the button is connected.
Embedded C
Hint

Use int buttonPin = 2; to store the pin number.

2
Create variable for button state
Create an integer variable called buttonState to store the digital input pin state of the button.
Embedded C
Hint

Declare int buttonState; without initializing it yet.

3
Read the digital input pin state
Use the function digitalRead(buttonPin) to read the button state and assign it to the variable buttonState.
Embedded C
Hint

Use buttonState = digitalRead(buttonPin); to read the pin.

4
Print the button state
Use printf to print "Pressed" if buttonState equals 1, otherwise print "Released".
Embedded C
Hint

Use an if statement to check buttonState and print accordingly.

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