#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <ArduinoJson.h>
DynamicJsonDocument doc(1024);
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int triggerPin = 12;
const int echoPin = 14;
const int dhtPin = 25;
DHT dht(dhtPin, DHT22);
void setup() {
Serial.begin(115200);
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT_PULLUP);
lcd.begin(16, 2);
lcd.init();
lcd.backlight();
lcd.begin(20, 4);
delay(1000);
}
void loop() {
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
// Measure the echo time
float duration = pulseIn(echoPin, HIGH);
// Calculate the distance in centimeters
// distance=duration×0.034cm/μs/2
// 0.034 speed of sound in air
float distance = duration * 0.034 / 2;
float humidity = dht.readHumidity();
// Read temperature as Celsius (the default)
float temperature = dht.readTemperature();
lcd.setCursor(0, 0);
lcd.print("Humidity: ");
lcd.println(humidity);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Temp : ");
lcd.println(temperature);
lcd.print(char(223));
lcd.print("C");
lcd.setCursor(0, 2); //(char)223 = degree symbol
lcd.print("Distance: " + String(distance, 0) + " cm");
lcd.setCursor(0, 3);
lcd.print("Distance: " + String(distance / 30.48) + " feet ");
String JsonData;
doc["Temperature"] = temperature;
doc["Humidity"] = humidity;
doc["Distance in the cm"] = String(distance, 0);
doc["Distance int the feet"] = String(distance / 30.48);
serializeJson(doc, JsonData);
Serial.println(JsonData);
delay(1000); // Delay for readability
}