#include <DHT.h>;
//I2C LCD:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display,Pls check your lcd.
  
//Constants
#define trigPin 10
#define echoPin 9
#define DHTPIN 7     // what pin we're connected to
#define DHTTYPE DHT22   // DHT 22
DHT dht(DHTPIN, DHTTYPE); //// Initialize DHT sensor for normal 16mhz Arduino
//Variables
//int chk;
int h;  //Stores humidity value
int t; //Stores temperature value
void setup()
{
    Serial.begin(9600);
    Serial.println("Temperature & Humidity Sensor and Distance Test");
    delay(1000);
    dht.begin();
    lcd.init(); //initialize the lcd
    lcd.backlight(); //open the backlight
    pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT);
   lcd.begin(16, 2);
}
void loop()
{
    //Read data and store it to variables h (humidity) and t (temperature)
    // Reading temperature or humidity takes about 250 milliseconds!
    h = dht.readHumidity();
    t = dht.readTemperature();
    
    //Print temp and humidity values to serial monitor
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %, Temp: ");
    Serial.print(t);
    Serial.println(" ° Celsius");
        
// set the cursor to (0,0):
// print from 0 to 9:
    lcd.setCursor(0, 0);
    lcd.println(" Now Temperature ");
    lcd.setCursor(0, 1);
    lcd.print("T:");
    lcd.print(t);
    lcd.print("C");
     
    lcd.setCursor(11, 1);
    lcd.print("H:");
    lcd.print(h);
    lcd.print("%");
    delay(1000);
  delay(1000); //Delay 1 sec.
  lcd.clear();
  {
   Serial.print("Distance: ");
    lcd.setCursor(0, 0);
    lcd.println(" Distance ");
    lcd.setCursor(1, 1);
  float duration, distance;
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH); 
  distance = (duration / 2)*0.034207;
  
  if (distance >= 300 || distance <= 2){ 
    lcd.print("Done!");  
    delay(1000);
  lcd.clear();
    lcd.print("Out of ranger!");    
  }
  else {
    //lcd.setBacklight(distance);
    lcd.print("Distance ");
    lcd.setCursor(0, 1);
    lcd.print("D:");
    lcd.print(distance);     
    lcd.print(" cm");
    delay(1000);
  }
  delay(100);
  lcd.clear();
}
}