#include "thingProperties.h"
#include <LiquidCrystal_I2C.h>
#include "DHT.h"

//LCD ayarlarını yapar.
LiquidCrystal_I2C lcd(0x27, 16, 2);
//DHT sensörünün hangi pinden çıkış vereceğini ayarlar.
DHT dht(0, DHT22);
//Okunan değerler için değişken.
float readdata;
//Sonraki üç satır delay kullanmadan araya bekleme koymayı sağlar.
unsigned long previousMillis = 0;
unsigned long currentMillis;
int currentTask = 1;
//Yüksek sıcaklık koşulu
bool isTemphigh = false;
//Cloud'dan mesaj gelip gelmediğini kontrol eder.
bool cloudMesajArrive = true;
//Cloud'a bağlantı durumu. 0 bağlı değil, 1 bağlı.
int connectionstate = 0;

void setup() {
  //Seri iletişimi başlatır.
Serial.begin(9600);
//sonraki 2 satır LCD ayarlarını yapar
lcd.init();
lcd.backlight();
//Led'in hangi pinde çıkış vereceğini ayarlar.
pinMode(12, OUTPUT);

//Cloud ayarlarını yapar.
initProperties();
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}


void loop() {
  //Cloud'dan alınan ve bilgileri günceller.
  ArduinoCloud.update();
  currentMillis = millis();
  if (currentMillis - previousMillis >= 2000) {
    //Cloud'a gönderilecek bilgilerin güncellenmesi.
    sicaklik = dht.readTemperature();
    nem = dht.readHumidity();
    connectionstate = ArduinoCloud.connected();
    //Seri iletişim ile nem ve sıcaklık değerlerini yazdırır.
    Serial.print("Humidity: "+ String(dht.readHumidity())+"% ||");
    Serial.println("Temperature: "+ String(dht.readTemperature())+"°C");
    //Aşağıdaki bütün if-else blokları da mesaj geldiyse ve bağlantı durumu 1
    //ise mesajı yazdırır ve araya 2 saniye ekler, değilse nem ve sıcaklık
    //arasında döngü ile lcd üzerinde gösterir.
    if(cloudMesajArrive == true && connectionstate == 1){
      WriteMesaj();
    }
    else{
      if (currentTask == 1)
      Temperature();
      else
        Humidity();
      currentTask = (currentTask == 1) ? 2 : 1;
      }
    previousMillis = currentMillis;
    cloudMesajArrive = false;
  }
}

// DHT22'den sıcaklık değerlerini çekerek ekrana gerekli şekilde
//Yazdırır.
void Temperature(){
  readdata = dht.readTemperature();
  lcd.clear();
  lcd.setCursor(2, 0);
  lcd.print("Temperature");
  if(readdata<=-10){
    lcd.setCursor(0, 1);
    lcd.print(readdata);
    lcd.setCursor(6,1);
    lcd.print("-VERY LOW");
    digitalWrite(12, LOW);
    isTemphigh = false;
  }
  else if(readdata>-10 && readdata <=0){
    lcd.setCursor(1, 1);
    lcd.print(readdata);
    lcd.setCursor(6,1);
    lcd.print("-VERY LOW");
    digitalWrite(12, LOW);
    isTemphigh = false;
  }
  else if(readdata>=0 && readdata <10){
    lcd.setCursor(3, 1);
    lcd.print(readdata);
    lcd.setCursor(7,1);
    lcd.print("-Normal");
    digitalWrite(12, LOW);
    isTemphigh = false;
  }
  else if(readdata>=10 && readdata <=25){
    lcd.setCursor(3, 1);
    lcd.print(readdata);
    lcd.setCursor(8,1);
    lcd.print("-Normal");
    digitalWrite(12, LOW);
    isTemphigh = false;

  }
  else{
    lcd.setCursor(3, 1);
    lcd.print(readdata);
    lcd.setCursor(8,1);
    lcd.print("-HIGH");
    digitalWrite(12, HIGH);
    isTemphigh = true;
  }
}

// DHT22'den Nem değerlerini çekerek ekrana gerekli şekilde
//Yazdırır.
void Humidity(){
  readdata = dht.readHumidity();
  lcd.clear();
  lcd.setCursor(4, 0);
  lcd.print("Humidity");
  lcd.setCursor(3, 1);
    lcd.print(readdata);
    lcd.setCursor(8,1);
  if(readdata<=50)
    lcd.print("-LOW");
  else    
    lcd.print("-HIGH");
}

//Cloud'dan çekilen mesajı yazdırır.
void WriteMesaj(){
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(mesaj);
}


//Cloud üzerinden mesaj geldiğinde mesajın geldiği bilgisini true yapar
void onMesajChange()  {
  cloudMesajArrive = true;
}


//Cloud üzerinden led yakılmaya çalışıldığında sıcaklık koşulunu kontrol edip
//Aksiyon alır.
void onLedChange()  {
  if(isTemphigh == false){
    if (led == 0)
    {
      digitalWrite(12, LOW);
    }
    else
    {
      digitalWrite(12, HIGH);
    }
  }
}
Loading
esp32-devkit-c-v4