#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <LiquidCrystal.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);

#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

int inputPin = 2;               
int pirState = LOW;             
int val = 0;                   

#define SCREEN_WIDTH 128 
#define SCREEN_HEIGHT 64 
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup(void)
{
  Serial.begin(9600);
  sensors.begin();
  pinMode(inputPin, INPUT);     

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000);
  
  lcd.init();
  lcd.backlight();
}

void loop(void){ 
  sensors.requestTemperatures(); 
  float temperatureC = sensors.getTempCByIndex(0);
  float temperatureF = sensors.getTempFByIndex(0);
  Serial.print("Celsius temperature: ");
  Serial.print(temperatureC); 
  Serial.print(", Fahrenheit temperature: ");
  Serial.println(temperatureF);
  delay(1000);

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 10); 

  display.clearDisplay(); 
  // display.println("Hello world!");
  if (temperatureC >= 0 && temperatureC <= 10) {
    display.println("Cool");
    delay(1000);
  } else if (temperatureC >= 11 && temperatureC <= 30) {
    display.println("Hot");
    delay(1000);
  }
  // display.print("Celsius temperature: ");
  // display.print(temperatureC); 
  // display.print(", Fahrenheit temperature: ");
  // display.println(temperatureF);
  display.display();

  val = digitalRead(inputPin);  
  if (val == HIGH) {            
    if (pirState == LOW) {
      Serial.println("Motion detected!");
      lcd.setCursor(2, 0);
      led.println("Hello world!");
      lcd.clear();
      led.println("Motion detected!");
      display.clearDisplay(); 
      display.println("Human detected");
      display.display();
      delay(1000); 
      pirState = HIGH;
    }
  } else {
    if (pirState == HIGH) {
      Serial.println("Motion ended!");
      pirState = LOW;
    }
  }
}