//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////wire (I2c) scan ////////////////////////////////////////
// --------------------------------------

//////////////////////////////////////////////////////////////////////////////////
///////////////////////keypad+ LCD + DHT22 compare////////////////////////////////
#include <LiquidCrystal_I2C.h>
#include "DHT.h"

#define DHTPIN A1  
#define DHTTYPE DHT22

#define I2C_ADDR    0x27
#define LCD_COLUMNS 16
#define LCD_LINES   2

#define R1 12
#define R2 11
#define R3 10
#define R4 9
#define C1 8
#define C2 7
#define C3 6
#define Led 4

unsigned long DHTtime;
int keyindex=0;
int in1=0,in2=0,set=20;

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);

void setup() 
{
  pinMode(Led,OUTPUT);
  pinMode(R1,OUTPUT);
  pinMode(R2,OUTPUT);
  pinMode(R3,OUTPUT);
  pinMode(R4,OUTPUT);
  pinMode(C1,INPUT_PULLUP);
  pinMode(C2,INPUT_PULLUP);
  pinMode(C3,INPUT_PULLUP);
  digitalWrite(R1,HIGH);
  digitalWrite(R2,HIGH);
  digitalWrite(R3,HIGH);
  digitalWrite(R4,HIGH);
   
  dht.begin(); 
  Serial.begin(115200);
  lcd.init();
  lcd.backlight();

  // Print something
  lcd.setCursor(0, 0);
  lcd.print(F("HELLO WORLD"));
  lcd.setCursor(0, 1);
  lcd.print(F("enter set temp"));
  delay(2000);
}

void loop() 
{
 int key=scankey();
 if(key!=20)
 {
   Serial.println(key);
   if(keyindex==0)
   {
     lcd.setCursor(0, 1);
     lcd.print(F("Set T:         "));
     lcd.setCursor(6, 1);
     lcd.print(key);
     in1=key;
     keyindex++;
   }else
   {
     lcd.setCursor(7, 1);
     lcd.print(key);
     lcd.print("  ");
     in2=key;
     set=(in1*10)+in2;
     Serial.print("set:");
     Serial.println(set);

     keyindex=0;

   }
  
   delay(100);
 }
 checkDHT();
 

}

void checkDHT()
{
   if ((millis() - DHTtime) > 1000)
  {
   
   float h = dht.readHumidity();
   float t = dht.readTemperature();
   DHTtime=millis();
     

   if (isnan(h) || isnan(t)) 
   {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
   }
   Serial.print(F("Humidity: "));
   Serial.print(h);
   Serial.print(F("%  Temperature: "));
   Serial.print(t);
   Serial.println(F("°C "));

   lcd.setCursor(0, 0);
   lcd.print(F("H:"));
   lcd.print(h,1);
   lcd.print(F("% T:"));
   lcd.print(t,1);
   lcd.print((char)223);
   lcd.print(F("C  "));
   //lcd.setCursor(5, 1);
   //lcd.print("line2");

 
  }
}

int scankey()
{
  int tempKey=20;
  digitalWrite(R1,LOW);
  if(digitalRead(C1)==0){ tempKey=1;}
  else if(digitalRead(C2)==0){ tempKey=2;}
  else if(digitalRead(C3)==0){ tempKey=3;}
  digitalWrite(R1,HIGH);
  
  digitalWrite(R2,LOW);
  if(digitalRead(C1)==0){ tempKey=4;}
  else if(digitalRead(C2)==0){ tempKey=5;}
  else if(digitalRead(C3)==0){ tempKey=6;}
  digitalWrite(R2,HIGH);

  digitalWrite(R3,LOW);
  if(digitalRead(C1)==0){ tempKey=7;}
  else if(digitalRead(C2)==0){ tempKey=8;}
  else if(digitalRead(C3)==0){ tempKey=9;}
  digitalWrite(R3,HIGH);
  
  digitalWrite(R4,LOW);
  if(digitalRead(C1)==0){ tempKey=10;}
  else if(digitalRead(C2)==0){ tempKey=11;}
  else if(digitalRead(C3)==0){ tempKey=12;}
  digitalWrite(R4,HIGH);
  delay(40);
  return tempKey;
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
btn5:1.l
btn5:2.l
btn5:1.r
btn5:2.r
btn6:1.l
btn6:2.l
btn6:1.r
btn6:2.r
btn7:1.l
btn7:2.l
btn7:1.r
btn7:2.r
btn8:1.l
btn8:2.l
btn8:1.r
btn8:2.r
btn9:1.l
btn9:2.l
btn9:1.r
btn9:2.r
btn10:1.l
btn10:2.l
btn10:1.r
btn10:2.r
btn11:1.l
btn11:2.l
btn11:1.r
btn11:2.r
btn12:1.l
btn12:2.l
btn12:1.r
btn12:2.r
btn13:1.l
btn13:2.l
btn13:1.r
btn13:2.r
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
led1:A
led1:C
r1:1
r1:2
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND