int fanpin = 3;
int touchpin = 7;
unsigned long val;

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

#include <IRremote.h>
const int irReceivePin = 2;
IRrecv irrecv(irReceivePin);
decode_results results;

#include <dht.h>
#define DHT11_PIN 5
dht DHT;

#define TrigPin 8
#define EchoPin 12
float distance;

void setup()
{
  pinMode(fanpin, OUTPUT);
  pinMode(touchpin, INPUT);
  Serial.begin(9600);
  irrecv.enableIRIn();
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Welcome to: ");
  lcd.setCursor(0, 1);
  lcd.print("NO.5 Mid School");

  pinMode(TrigPin, OUTPUT);
  pinMode(EchoPin, INPUT);
}

void loop() {
  if (digitalRead(touchpin) == LOW) {
    digitalWrite(TrigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(TrigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(TrigPin, LOW);

    distance = (float(pulseIn(EchoPin, HIGH)) * 17 ) / 1000;
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Distance is:");
    lcd.setCursor(0, 1);
    lcd.print(distance);
    lcd.setCursor(6, 1);
    lcd.print("cm");
  }

  if (irrecv.decode(&results))
  {
    Serial.println(results.value, HEX);
    delay(200);
    switch (results.value)
    {
      case 0XFFA25D:
        digitalWrite(fanpin, HIGH);
        break;
      case 0XFF629D:
        digitalWrite(fanpin, LOW);
        break;
      case 0XFFE21D:
        int chk = DHT.read11(DHT11_PIN);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Humidity:");
        lcd.setCursor(10, 0);
        lcd.print(DHT.humidity, 1);
        lcd.setCursor(0, 1);
        lcd.print("Temperature:");
        lcd.setCursor(12, 1);
        lcd.print(DHT.temperature, 1);
        break;
      default:
        break;
    }
    irrecv.resume();
  }
}