This circuit is designed to interface an Arduino UNO with an LCD display and a DHT11 humidity and temperature sensor. The LCD display is used to show the temperature readings captured by the DHT11 sensor. A trimmer potentiometer is included to adjust the contrast of the LCD, and resistors are used for current limiting and pull-up configurations.
#include <LiquidCrystal.h>
#include <DHT.h>
// Initialize the LCD with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Define the DHT sensor pin and type
#define DHTPIN 9
#define DHTTYPE DHT11
// Initialize the DHT sensor
DHT dht(DHTPIN, DHTTYPE);
unsigned long startTime;
float previousTemperature = NAN;
void setup() {
// Set up the LCD's number of columns and rows
lcd.begin(16, 2);
// Print a message to the LCD
lcd.print("Initializing...");
// Initialize the start time
startTime = millis();
// Initialize the DHT sensor
dht.begin();
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
}
void loop() {
// Calculate the elapsed time in milliseconds
unsigned long elapsedTime = millis() - startTime;
// Convert elapsed time to seconds with one decimal place
float elapsedTimeSec = elapsedTime / 1000.0;
// Read temperature as Celsius
float temperature = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(temperature)) {
lcd.setCursor(0, 0);
lcd.print("Error reading");
return;
}
// Only update the display if the temperature has changed
if (temperature != previousTemperature) {
// Clear the first row
lcd.setCursor(0, 0);
lcd.print(" "); // Clear the first row by printing spaces
// Set the cursor to the first row, first column
lcd.setCursor(0, 0);
lcd.print("Temp: ");
// Clear the second row
lcd.setCursor(0, 1);
lcd.print(" "); // Clear the second row by printing spaces
// Set the cursor to the second row, first column
lcd.setCursor(0, 1);
// Print the temperature to the LCD
lcd.print(temperature);
lcd.print(" C");
// Update the previous temperature
previousTemperature = temperature;
}
// Add a small delay to avoid flickering
delay(50);
}
This code initializes the LCD and DHT11 sensor, then enters a loop where it reads the temperature and displays it on the LCD. If the temperature reading fails, it displays an error message. The display is updated only when the temperature changes to minimize flickering.