Bird
Raised Fist0
Arduinoprogramming~10 mins

Humidity and temperature (DHT11/DHT22) in Arduino - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Humidity and temperature (DHT11/DHT22)
Start
↓
Initialize DHT sensor
↓
Read humidity
↓
Read temperature
↓
Check if readings are valid
↓
Print values
↓
Wait before next read
↓
Repeat loop
The program initializes the sensor, reads humidity and temperature, checks if readings are valid, prints them or an error, then waits before repeating.
Execution Sample
Arduino
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
  Serial.begin(9600);
  dht.begin();
}
void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.println(" *C");
  delay(2000);
}
This code reads humidity and temperature from a DHT11 sensor and prints the values every 2 seconds, or prints an error if reading fails.
Execution Table
StepActionHumidity (h)Temperature (t)ConditionOutput
1Start loopN/AN/AN/AN/A
2Read humidity45.3N/AN/AN/A
3Read temperature45.323.7N/AN/A
4Check if h or t is NaN45.323.7FalseProceed
5Print humidity45.323.7N/AHumidity: 45.3 %
6Print temperature45.323.7N/ATemperature: 23.7 *C
7Delay 2000ms45.323.7N/AWait 2 seconds
8Repeat loopN/AN/AN/ABack to step 1
9Read humidity (error case)NaNN/AN/AN/A
10Read temperature (error case)NaNNaNN/AN/A
11Check if h or t is NaNNaNNaNTruePrint error
12Print errorNaNNaNN/AFailed to read from DHT sensor!
13Return earlyNaNNaNN/ASkip printing values
💡 Loop repeats indefinitely; error case returns early to avoid printing invalid data.
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4After Step 9 (error)After Step 10 (error)
h (humidity)N/A45.345.345.3NaNNaN
t (temperature)N/AN/A23.723.7N/ANaN
Key Moments - 3 Insights
Why do we check if humidity or temperature is NaN before printing?
Because the sensor might fail to read data sometimes, resulting in NaN (not a number). Checking prevents printing invalid values, as shown in steps 4 and 11 of the execution_table.
What happens if the sensor reading fails?
The program prints an error message and returns early from the loop iteration, skipping the printing of humidity and temperature values. This is shown in steps 11 to 13.
Why is there a delay after printing the values?
The delay of 2000 milliseconds (2 seconds) slows down the loop so readings are spaced out and the serial output is readable, as shown in step 7.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the humidity value after step 2?
ANaN
B23.7
C45.3
DN/A
💡 Hint
Check the 'Humidity (h)' column at step 2 in the execution_table.
At which step does the program detect a failed sensor reading?
AStep 11
BStep 4
CStep 7
DStep 2
💡 Hint
Look for the step where the condition 'h or t is NaN' is True in the execution_table.
If the delay(2000) was removed, how would the execution_table change?
ATemperature would not be read
BStep 7 would be missing and loop would run faster
CHumidity values would become NaN
DError message would print every time
💡 Hint
Refer to step 7 where delay is applied before repeating the loop.
Concept Snapshot
Use DHT library to read humidity and temperature.
Check if readings are valid (not NaN) before printing.
Print values to Serial Monitor.
Use delay to space out readings.
Loop repeats indefinitely for continuous monitoring.
Full Transcript
This Arduino program reads humidity and temperature from a DHT11 or DHT22 sensor. It starts by initializing the sensor and serial communication. In each loop, it reads humidity and temperature values. It checks if either reading failed (NaN). If so, it prints an error message and skips printing values. Otherwise, it prints humidity and temperature to the Serial Monitor. Then it waits 2 seconds before repeating. This cycle continues indefinitely, providing updated sensor readings every 2 seconds.

Practice

(1/5)
1. What does the DHT11 sensor measure in an Arduino project?
easy
A. Humidity and temperature
B. Light intensity
C. Sound levels
D. Distance

Solution

  1. Step 1: Understand sensor purpose

    The DHT11 sensor is designed to measure environmental conditions.
  2. Step 2: Identify measured values

    It specifically measures humidity and temperature, not light, sound, or distance.
  3. Final Answer:

    Humidity and temperature -> Option A
  4. Quick Check:

    DHT11 measures humidity and temperature [OK]
Hint: Remember DHT sensors measure air humidity and temperature [OK]
Common Mistakes:
  • Confusing DHT11 with light or sound sensors
  • Thinking it measures distance
  • Assuming it measures pressure
2. Which of the following is the correct way to include the DHT library in an Arduino sketch?
easy
A. #include "dht11.h"
B. #include
C. #include <dht_sensor>
D. #include

Solution

  1. Step 1: Recall library inclusion syntax

    Arduino libraries are included with #include and angle brackets for installed libraries.
  2. Step 2: Identify correct library name

    The standard DHT library is included as #include <DHT.h>.
  3. Final Answer:

    #include <DHT.h> -> Option D
  4. Quick Check:

    Use #include <DHT.h> to include DHT library [OK]
Hint: Use angle brackets and correct case for library names [OK]
Common Mistakes:
  • Using wrong file names
  • Using quotes instead of angle brackets
  • Incorrect capitalization
3. What will be the output of this Arduino code snippet if the sensor reading is successful?
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
medium
A. Error reading sensor
B. Humidity: % Temperature: *C
C. Humidity: 45.00 % Temperature: 23.00 *C
D. Humidity: NaN % Temperature: NaN *C

Solution

  1. Step 1: Understand sensor reading functions

    The functions readHumidity() and readTemperature() return float values if successful.
  2. Step 2: Analyze Serial output

    The code prints humidity and temperature values with labels and units, separated by tab.
  3. Final Answer:

    Humidity: 45.00 % Temperature: 23.00 *C -> Option C
  4. Quick Check:

    Successful read prints values with labels [OK]
Hint: Successful reads print numbers, errors show NaN or messages [OK]
Common Mistakes:
  • Expecting error message on success
  • Ignoring units in output
  • Confusing NaN with valid numbers
4. Identify the error in this Arduino code snippet for reading DHT sensor data:
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (humidity == NULL || temperature == NULL) {
  Serial.println("Failed to read from DHT sensor!");
}
medium
A. Using NULL to check float values is incorrect
B. Missing semicolon after readTemperature()
C. Serial.println syntax is wrong
D. Variables humidity and temperature should be int

Solution

  1. Step 1: Understand data types and checks

    readHumidity() and readTemperature() return float, not pointers, so NULL is invalid.
  2. Step 2: Correct way to check errors

    Use isnan() function to check if readings failed (NaN means not a number).
  3. Final Answer:

    Using NULL to check float values is incorrect -> Option A
  4. Quick Check:

    Check floats with isnan(), not NULL [OK]
Hint: Use isnan() to check float errors, not NULL [OK]
Common Mistakes:
  • Checking floats against NULL
  • Assuming int type for sensor data
  • Syntax errors in Serial print
5. You want to display temperature in Fahrenheit using DHT22 sensor readings in Arduino. Which code snippet correctly converts Celsius to Fahrenheit after reading temperature?
float tempC = dht.readTemperature();
float tempF = ?;
Serial.print("Temperature: ");
Serial.print(tempF);
Serial.println(" *F");
hard
A. tempF = tempC * 5 / 9 + 32;
B. tempF = tempC * 9 / 5 + 32;
C. tempF = tempC / 9 * 5 + 32;
D. tempF = (tempC + 32) * 9 / 5;

Solution

  1. Step 1: Recall Celsius to Fahrenheit formula

    The correct formula is Fahrenheit = Celsius * 9/5 + 32.
  2. Step 2: Apply formula in code

    Assign tempF = tempC * 9 / 5 + 32; to convert temperature correctly.
  3. Final Answer:

    tempF = tempC * 9 / 5 + 32; -> Option B
  4. Quick Check:

    Celsius to Fahrenheit = C * 9/5 + 32 [OK]
Hint: Use C * 9/5 + 32 to convert Celsius to Fahrenheit [OK]
Common Mistakes:
  • Mixing multiplication and division order
  • Adding 32 before multiplying
  • Using wrong formula
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