📖 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
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).
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.
Final Answer:
Reads the current state (HIGH or LOW) of a digital input pin. -> Option C
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
Step 1: Identify the function to set pin mode
pinMode(pin, mode) is used to configure a pin as INPUT or OUTPUT.
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).
Final Answer:
pinMode(pin, INPUT); -> Option B
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
Step 1: Analyze pin mode and reading
The pin 7 is set as INPUT, so digitalRead(7) correctly reads the pin state.
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".
Final Answer:
Button is pressed -> Option A
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
Step 1: Check digitalRead usage
digitalRead requires the pin number as an argument, but here it is called without any argument.
Step 2: Verify other parts of code
Pin mode setting is missing but not the main error asked; the if condition syntax is correct.
Final Answer:
Missing pin number argument in digitalRead function. -> Option D
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
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).
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).
Final Answer:
pinMode(3, INPUT);
pinMode(13, OUTPUT);
if (digitalRead(3) == HIGH) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
} -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.