Bird
Raised Fist0
Arduinoprogramming~20 mins

Using sensor libraries in Arduino - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Sensor Library Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Arduino sensor reading code?
Consider this Arduino sketch that reads a temperature sensor value and prints it. What will be printed on the Serial Monitor?
Arduino
int sensorPin = A0;
void setup() {
  Serial.begin(9600);
}
void loop() {
  int sensorValue = analogRead(sensorPin);
  float voltage = sensorValue * (5.0 / 1023.0);
  float temperatureC = (voltage - 0.5) * 100;
  Serial.println(temperatureC);
  delay(1000);
}
AA raw sensor value between 0 and 1023 printed
BA voltage value between 0 and 5 printed directly
CA constant value 0 printed every second
DA temperature value in Celsius around 200.0 if sensorValue is about 512
Attempts:
2 left
💡 Hint
Think about how analogRead maps sensor values to voltage and then to temperature.
🧠 Conceptual
intermediate
1:30remaining
Which library function initializes the sensor correctly?
You want to use a DHT11 temperature and humidity sensor with the DHT library. Which function call correctly initializes the sensor in your Arduino sketch?
ADHT dht(DHT11, 2);
BDHT dht(2, DHT11);
CDHT dht(11, 2);
DDHT dht(2);
Attempts:
2 left
💡 Hint
Check the order of parameters: pin number first, then sensor type.
🔧 Debug
advanced
2:30remaining
Why does this sensor reading code fail to compile?
This Arduino code uses the Adafruit_Sensor library but fails to compile. What is the cause?
Arduino
#include <Adafruit_Sensor.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
  Serial.begin(9600);
  dht.begin();
}
void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  Serial.print("Humidity: ");
  Serial.println(h);
  Serial.print("Temperature: ");
  Serial.println(t);
  delay(2000);
}
ASerial.begin(9600); must be called after dht.begin();
BDHT dht(DHTPIN, DHTTYPE); should be DHT dht(DHTTYPE, DHTPIN);
CMissing #include <DHT_U.h> which is required for Adafruit_Sensor compatibility
DThe delay(2000); is too long and causes a timeout error
Attempts:
2 left
💡 Hint
Check if all required library headers are included for sensor compatibility.
📝 Syntax
advanced
1:30remaining
Which option correctly reads and prints sensor data using a library?
Given a sensor library with a read() method that returns a float, which code snippet correctly reads and prints the sensor value?
Afloat val = sensor.read(); Serial.println(val);
Bfloat val = sensor.read; Serial.println(val);
Cfloat val = sensor.read(); Serial.print(val); Serial.println();
Dfloat val = sensor.read; Serial.print(val);
Attempts:
2 left
💡 Hint
Remember to call functions with parentheses () to execute them.
🚀 Application
expert
3:00remaining
How many sensor readings are stored in the array after this code runs?
This Arduino code reads a sensor 5 times and stores values in an array. How many valid readings does the array contain after the loop?
Arduino
float readings[5];
int i = 0;
void setup() {
  Serial.begin(9600);
  while(i < 5) {
    readings[i] = analogRead(A0) * (5.0 / 1023.0);
    if(readings[i] > 0) {
      i++;
    }
  }
}
void loop() {}
A5 readings, because the loop increments i only when reading is positive
B0 readings, because analogRead returns 0 and i never increments
CInfinite loop, because i never increments if readings[i] is 0
DLess than 5 readings, because some readings might be zero and skipped
Attempts:
2 left
💡 Hint
Think about how the loop increments i only when readings[i] > 0.

Practice

(1/5)
1. What is the first step when using a sensor library in an Arduino sketch?
easy
A. Include the sensor library at the top of the sketch
B. Read sensor values in the loop() function
C. Create a sensor object inside the loop()
D. Start the sensor in the loop() function

Solution

  1. Step 1: Understand the library usage

    Before using a sensor, you must include its library so Arduino knows how to communicate with it.
  2. Step 2: Identify correct placement

    Including the library is done at the top of the sketch, before setup() and loop().
  3. Final Answer:

    Include the sensor library at the top of the sketch -> Option A
  4. Quick Check:

    Include library first = A [OK]
Hint: Always include libraries before setup() [OK]
Common Mistakes:
  • Trying to create sensor object before including library
  • Starting sensor in loop() instead of setup()
  • Reading sensor before initializing it
2. Which of the following is the correct way to create a sensor object for a DHT sensor using its library?
easy
A. DHT sensor = DHT(2);
B. DHT sensor = new DHT(2, DHT11);
C. DHT sensor(2, DHT11);
D. DHT sensor = DHT11(2);

Solution

  1. Step 1: Recall object creation syntax in Arduino C++

    Objects are created by calling the constructor directly, like ClassName objectName(parameters); without '=' or 'new' keyword.
  2. Step 2: Match correct syntax for DHT library

    The DHT library uses: DHT sensor(pin, type); so DHT sensor(2, DHT11); matches this exactly.
  3. Final Answer:

    DHT sensor(2, DHT11); -> Option C
  4. Quick Check:

    Object creation = ClassName object(params); [OK]
Hint: Create objects without '=' or 'new' in Arduino [OK]
Common Mistakes:
  • Using '=' sign when creating objects
  • Using 'new' keyword which is not typical in Arduino sketches
  • Confusing sensor type and pin order
3. Given the code below, what will be printed if the sensor reading fails?
#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();
  if (isnan(h)) {
    Serial.println("Failed to read humidity!");
  } else {
    Serial.print("Humidity: ");
    Serial.println(h);
  }
  delay(2000);
}
medium
A. Failed to read humidity!
B. Humidity: 0.00
C. Humidity: NaN
D. No output

Solution

  1. Step 1: Understand the isnan() check

    The code checks if the humidity reading is 'NaN' (not a number), which means the sensor failed to read.
  2. Step 2: Determine output when reading fails

    If isnan(h) is true, the code prints "Failed to read humidity!" to Serial.
  3. Final Answer:

    Failed to read humidity! -> Option A
  4. Quick Check:

    isnan true prints error message [OK]
Hint: Check isnan() to detect sensor read failure [OK]
Common Mistakes:
  • Assuming sensor returns 0 on failure
  • Printing raw value without checking for NaN
  • Not calling dht.begin() in setup()
4. Identify the error in this Arduino sketch snippet using a sensor library:
#include <DHT.h>
DHT dht(2, DHT11);

void setup() {
  Serial.begin(9600);
}

void loop() {
  dht.begin();
  float t = dht.readTemperature();
  Serial.println(t);
  delay(1000);
}
medium
A. readTemperature() returns int, not float
B. dht.begin() should be called in setup(), not loop()
C. Missing #define for sensor pin
D. Serial.begin() should be called in loop()

Solution

  1. Step 1: Locate sensor initialization

    dht.begin() initializes the sensor and should be called once in setup() to avoid repeated initialization.
  2. Step 2: Identify why calling dht.begin() in loop() is wrong

    Calling dht.begin() repeatedly in loop() can cause sensor communication issues and slow down the program.
  3. Final Answer:

    dht.begin() should be called in setup(), not loop() -> Option B
  4. Quick Check:

    Initialize sensor once in setup() [OK]
Hint: Initialize sensors once in setup() [OK]
Common Mistakes:
  • Calling sensor start functions repeatedly in loop()
  • Confusing Serial.begin() placement
  • Assuming readTemperature() returns int
5. You want to read temperature and humidity from a DHT11 sensor and turn on an LED if humidity is above 70%. Which code snippet correctly uses the sensor library and controls the LED?
hard
A.
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
#define LEDPIN 13
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
  pinMode(LEDPIN, OUTPUT);
}

void loop() {
  float h = dht.readHumidity();
  if (!isnan(h) || h > 70) {
    digitalWrite(LEDPIN, HIGH);
  } else {
    digitalWrite(LEDPIN, LOW);
  }
  delay(2000);
}
B.
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
#define LEDPIN 13
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  pinMode(LEDPIN, OUTPUT);
}

void loop() {
  float h = dht.readHumidity();
  if (h > 70) {
    digitalWrite(LEDPIN, HIGH);
  } else {
    digitalWrite(LEDPIN, LOW);
  }
  delay(2000);
}
C.
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
#define LEDPIN 13
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
  pinMode(LEDPIN, OUTPUT);
}

void loop() {
  float h = dht.readHumidity();
  if (h < 70) {
    digitalWrite(LEDPIN, HIGH);
  } else {
    digitalWrite(LEDPIN, LOW);
  }
  delay(2000);
}
D.
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
#define LEDPIN 13
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
  pinMode(LEDPIN, OUTPUT);
}

void loop() {
  float h = dht.readHumidity();
  if (!isnan(h) && h > 70) {
    digitalWrite(LEDPIN, HIGH);
  } else {
    digitalWrite(LEDPIN, LOW);
  }
  delay(2000);
}

Solution

  1. Step 1: Check sensor initialization and pin setup

    #include <DHT.h>
    #define DHTPIN 2
    #define DHTTYPE DHT11
    #define LEDPIN 13
    DHT dht(DHTPIN, DHTTYPE);
    
    void setup() {
      Serial.begin(9600);
      dht.begin();
      pinMode(LEDPIN, OUTPUT);
    }
    
    void loop() {
      float h = dht.readHumidity();
      if (!isnan(h) && h > 70) {
        digitalWrite(LEDPIN, HIGH);
      } else {
        digitalWrite(LEDPIN, LOW);
      }
      delay(2000);
    }
    
    correctly calls dht.begin() in setup() and sets LED pin as output.
  2. Step 2: Verify humidity check and LED control logic

    #include <DHT.h>
    #define DHTPIN 2
    #define DHTTYPE DHT11
    #define LEDPIN 13
    DHT dht(DHTPIN, DHTTYPE);
    
    void setup() {
      Serial.begin(9600);
      dht.begin();
      pinMode(LEDPIN, OUTPUT);
    }
    
    void loop() {
      float h = dht.readHumidity();
      if (!isnan(h) && h > 70) {
        digitalWrite(LEDPIN, HIGH);
      } else {
        digitalWrite(LEDPIN, LOW);
      }
      delay(2000);
    }
    
    checks if humidity is not NaN and greater than 70 before turning LED on, which prevents errors from failed reads.
  3. Final Answer:

    The code snippet with !isnan(h) check and && h > 70 -> Option D
  4. Quick Check:

    Initialize sensor + check isnan + control LED = A [OK]
Hint: Always check isnan() before using sensor values [OK]
Common Mistakes:
  • Not calling dht.begin() in setup()
  • Missing isnan() check causing wrong LED behavior
  • Using || instead of && in humidity condition
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