Bird
Raised Fist0
Arduinoprogramming~5 mins

Using sensor libraries in Arduino

Choose your learning style10 modes available
Introduction

Sensor libraries help your Arduino understand and use sensors easily. They save you time by giving ready-made code to read sensor data.

When you want to read temperature from a sensor like DHT11 or DHT22.
When you need to get distance measurements from an ultrasonic sensor.
When you want to use a light sensor to detect brightness.
When you want to avoid writing complex code to communicate with sensors.
When you want reliable and tested code to get sensor readings.
Syntax
Arduino
#include <SensorLibrary.h>

SensorType sensor(pin);

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

void loop() {
  int value = sensor.read();
  Serial.println(value);
  delay(1000);
}

#include adds the sensor library to your program.

You create a sensor object with the pin number where the sensor is connected.

Examples
This example uses the DHT library to read temperature from a DHT11 sensor on pin 2.
Arduino
#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

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

void loop() {
  float temp = dht.readTemperature();
  Serial.println(temp);
  delay(2000);
}
This example uses the NewPing library to measure distance with an ultrasonic sensor.
Arduino
#include <NewPing.h>

#define TRIGGER_PIN  12
#define ECHO_PIN     11
#define MAX_DISTANCE 200

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

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

void loop() {
  unsigned int distance = sonar.ping_cm();
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
  delay(1000);
}
Sample Program

This program reads temperature from a DHT11 sensor every 2 seconds and prints it to the Serial Monitor. It also checks if the reading failed.

Arduino
#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
  Serial.println("DHT11 sensor starting...");
}

void loop() {
  float temperature = dht.readTemperature();
  if (isnan(temperature)) {
    Serial.println("Failed to read from sensor!");
  } else {
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.println(" °C");
  }
  delay(2000);
}
OutputSuccess
Important Notes

Always check if the sensor reading is valid before using it.

Make sure to install the sensor library in your Arduino IDE before using it.

Use the correct pin numbers and sensor types when creating sensor objects.

Summary

Sensor libraries make reading sensors easy and reliable.

Include the library, create a sensor object, start it in setup(), then read values in loop().

Always check for errors in sensor readings to avoid wrong data.

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