#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 20, 4);
const float BETA = 3950;
int lcdpin = 4;
int inputpin = 23;
int pirstate = LOW;             
int val = 0;      
int tem_mo = 0;
int number_mo = 0;              
#define ledpin  2
void setup() {
  pinMode(inputpin, INPUT);
  pinMode(ledpin, OUTPUT);
  Serial.begin(9600);
  
  LCD.init();
  
}

void loop() {
  val = digitalRead(inputpin);
  int analogValue = analogRead(13);
  float celsius = 1 / (log(1 / (4096. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
  Serial.print("Temperature: ");
  Serial.print(celsius );
  Serial.println(" ℃");
  delay(1000);
  Serial.print("LIGHT: ");
  Serial.print("OFF.  " );
  delay(1000);
  if (val == HIGH) {
    tem_mo =tem_mo + celsius ;
    number_mo = number_mo + 1;
    int avg_tem_mo =tem_mo/number_mo;
    digitalWrite(lcdpin, HIGH);
    if (pirstate == LOW){
      LCD.setCursor(0, 0);
      LCD.println("temperature:"); 
      LCD.println(celsius);

      LCD.setCursor(0, 3);
      LCD.println("average");
      LCD.println(avg_tem_mo);
      pirstate = HIGH;
        if (celsius < 10){
          LCD.setCursor(0, 2);
          LCD.println("LED On"); 
          digitalWrite(ledpin, 1);
          Serial.print("LIGHT: ");
          Serial.print("ON" );
          delay(5000);
          digitalWrite(ledpin, LOW);

        }
    }
  } else{
    digitalWrite(lcdpin, LOW);
    if (pirstate == HIGH) {
      // we have just turned of
      LCD.clear();
      // We only want to print on the output change, not state
      pirstate = LOW;
  }  
  }
}