#include "thingProperties.h"
#include "DHT.h"
#include <LiquidCrystal_I2C.h>
//21100011043 MEHMET SELEK IoT Odev1

DHT dht(0, DHT22); //sensörümüzü tanımlıyoruz
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2); //lcd mizi tanımlıyoruz 16 sutun 2 satır

void setup() {
  Serial.begin(9600);
// pin mode
  pinMode(12, OUTPUT);
// lcd başlatma 
  LCD.init();
  LCD.backlight();
  LCD.setCursor(0, 0);
// arduino cloud kodları
  initProperties();
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();

}

void loop() {
  ArduinoCloud.update();
  dhtVeriOkuma();
  onLedChange();
  onMesajChange();
  if(nem<=50){ //nem yüzde değeri 50 veya 50'den az olursa buraya girer
    LCD.clear();
    LCD.setCursor(4,0); //HUMIDITY yazısı için cursor'u konumlandırıyoruz
    LCD.print("HUMIDITY");
    LCD.setCursor(3,1); //nem yüzdesi yazısı için cursor'u konumlandırıyoruz
    LCD.print(String(nem)+"-LOW");
  }
  else{ //nem yüzde değeri 50 den büyükse buraya girer
    LCD.clear();
    LCD.setCursor(4,0); //HUMIDITY yazısı için cursor'u konumlandırıyoruz
    LCD.print("HUMIDITY");
    LCD.setCursor(3,1); //nem yüzdesi yazısı için cursor'u konumlandırıyoruz
    LCD.print(String(nem)+"-HIGH");
  }
  delay(2000);
  if(sicaklik<0){ //sıcaklık değeri 0 dan küçükse buraya girer
    LCD.clear();
    LCD.setCursor(2,0); //TEMPERATURE yazısı için cursor'u konumlandırıyoruz
    LCD.print("TEMPERATURE");
    LCD.setCursor(0,1); //sıcaklık değeri yazısı için cursor'u konumlandırıyoruz
    LCD.print(String(sicaklik)+"-VERY LOW");
  }
  else if(sicaklik>=0 && sicaklik<=25){ //sıcaklık değeri 0 ve 25 arasındaysa (0 ve 25 dahil) buraya girer
    LCD.clear();
    LCD.setCursor(2,0); //TEMPERATURE yazısı için cursor'u konumlandırıyoruz
    LCD.print("TEMPERATURE");
    LCD.setCursor(3,1); //sıcaklık değeri yazısı için cursor'u konumlandırıyoruz
    LCD.print(String(sicaklik)+"-NORMAL");
  }
  else{ //sıcaklık değeri 25 den büyükse buraya girer
    LCD.clear();
    LCD.setCursor(2,0); //TEMPERATURE yazısı için cursor'u konumlandırıyoruz
    LCD.print("TEMPERATURE");
    LCD.setCursor(3,1); //sıcaklık değeri yazısı için cursor'u konumlandırıyoruz
    LCD.print(String(sicaklik)+"-HIGH");
  }
  delay(2000);
}

void dhtVeriOkuma(){ // dht22 sensöründen sıcaklık ve nem verilerini okur ve terminale verileri yazdırır.
  float t = dht.readTemperature();
  float u = dht.readHumidity();
  Serial.print("Humidity: "+ String(u)+"% ||");
  Serial.println("Temperature: "+ String(t)+"°C");
  Serial.println("---------------------");
  sicaklik = t;
  nem = u;
}

void onMesajChange()  {  // Arduino Clouddan bir mesaj geldiğinde buraya girer
  LCD.clear(); // lcd yi temizler
  LCD.setCursor(0, 0);  // mesaj için cursor ı en üst sola ayarlar
  LCD.print(mesaj); // mesajı lcd ye yazar
  delay(2000);  // 2 saniye delay ekler
}


void onLedChange()  { // Arduino clouddaki LED butonundan aldığı değere göre ledin yanıp/sönmesini ayarlar
  if (led == 1 || sicaklik>25) // led değeri 1 ise veya sicaklik değeri high ise buraya girer
  {
    digitalWrite(12, HIGH); // 12 numaralı pine high seviyesi (5V) uygulanır ve led yanar
  }
  else // led değeri 1 değil ise buraya girer
  {
    digitalWrite(12, LOW); // 12 numaralı pine low seviyesi (0V) uygulanır ve led yanar
  }

}