#include<boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <DHT.h>
#include <DHT_U.h>
unsigned int rawData[67] = {4450,4450, 550,550, 550,1650, 550,1700, 500,1700, 550,550, 550,550, 550,550, 550,600, 500,600, 500,1700, 550,1650, 550,1700, 500,600, 500,600, 550,550, 500,600, 500,600, 550,550, 550,1700, 500,1700, 550,550, 500,600, 550,550, 550,600, 500,1700, 500,1700, 500,600, 550,550, 550,1700, 500,1700, 500,1700, 550,1700, 500};
const int switchPin = 7;
const int recv = 2;
const int Relay = 8;
const int sensePin=4;
int buttonState = 0;
int khz = 38; // 38kHz carrier frequency for the NEC protocol
#define Button1 16753245
#define Button2 16736925
#define Button3 16769565
IRrecv irrecv(recv);
decode_results results;
DHT HT(sensePin,DHT11);
LiquidCrystal_I2C lcd(0x27,16,2);
// Create IR Send Object
IRsend irsend;
int humidity;
int temp;
//scroll variables
int Li = 16;
int Lii = 0;
int Ri = -1;
int Rii = -1;
byte termometru[8] = //icon for termometer
{
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110
};
byte picatura[8] = //icon for water droplet
{
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110,
};
void setup() {
Serial.begin(9600);
pinMode(switchPin, INPUT);
irrecv.enableIRIn();
pinMode (Relay, OUTPUT) ;
lcd.init();
lcd.clear();
lcd.backlight();
HT.begin();
lcd.begin (16,2);
lcd.setCursor(3,0);
lcd.print("Welcome To");
lcd.setCursor(2,1);
lcd.print("Smart House");
delay(3000);
lcd.clear();
lcd.createChar(1,termometru);
lcd.createChar(2,picatura);
lcd.setCursor(4,0);
lcd.print("1.Weather");
delay(1000);
lcd.clear();
}
void loop() {
irrecv.resume();
buttonState = digitalRead(switchPin);
humidity=HT.readHumidity();
temp=HT.readTemperature();
lcd.setCursor(1,0);
lcd.write(1);
lcd.setCursor(3, 0);
lcd.print(temp);
lcd.setCursor(5, 0);
lcd.print((char)223); //degree sign
lcd.print("C");
lcd.setCursor(10, 0);
lcd.write(2);
lcd.setCursor(12, 0);
lcd.print(humidity);
lcd.print("%");
if(temp>=30)
{
lcd.setCursor(0,1);
lcd.print(Scroll_LCD_Left("it's very hot Today, Wear a Shirt"));
}
if(temp>=25)
{
lcd.setCursor(0,1);
lcd.print(Scroll_LCD_Left("it's hot Today, Wear a T-Shirt"));
}
else if(temp>=20)
{
lcd.setCursor(0,1);
lcd.print(Scroll_LCD_Left("it's cool Today, Wear a Shirt"));
}
else if(temp<20)
{
lcd.setCursor(0,1);
lcd.print(Scroll_LCD_Left("it's Cold Today, Wear a jacket"));
}
delay(500);
if (irrecv.decode(&results)) {
switch(results.value){
case Button1:
lcd.clear();
digitalWrite(Relay, HIGH) ;
lcd.setCursor(0,0);
lcd.print("Living room is");
lcd.setCursor(6,1);
lcd.print("ON");
delay(3000);
lcd.clear();
irrecv.resume();
break;
case Button2:
lcd.clear();
digitalWrite(Relay, LOW) ;
lcd.setCursor(0,0);
lcd.print("Living room is");
lcd.setCursor(6,1);
lcd.print("OFF");
delay(3000);
lcd.clear();
irrecv.resume();
break;
case Button3:
lcd.clear();
lcd.setCursor(6,0);
lcd.print("TV");
lcd.setCursor(6,1);
lcd.print("ON/OFF");
irsend.sendRaw(rawData, 67, 38);
irrecv.enableIRIn();
delay(3000);
lcd.clear();
irrecv.resume();
break;
default:
Serial.println(results.value,HEX);
irrecv.resume();
}
irrecv.resume();
}
if (buttonState == HIGH) {
irsend.sendRaw(rawData, 67, khz);
irrecv.enableIRIn();
irrecv.resume();
}
}
String Scroll_LCD_Left(String StrDisplay){
String result;
String StrProcess =" "+StrDisplay;
result = StrProcess.substring(Li,Lii);
Li++;
Lii++;
if (Li>StrProcess.length()){
Li=16;
Lii=0;
}
return result;
}
void Clear_Scroll_LCD_Left(){
Li=16;
Lii=0;
}