#include <LiquidCrystal.h>
#include <math.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
#define N 10
float Getterm(int RawADC)
{
float celsius = 1 / (log(1 / (1023. / RawADC - 1)) / 3950 + 1.0 / 298.15) - 273.15;
return celsius;
}
void Avg(float temp, int &min, int &max, int &avg){
static byte index = 0;
static float arr[N];
arr[index] = temp;
if(index++ >= N){
index = 0;
}
float avgFl;
float minFl = 100;
float maxFl = -100;
for(int i = 0; i < N; i++){
avgFl += arr[i];
if(minFl > arr[i]){
minFl = arr[i];
}
if(maxFl < arr[i]){
maxFl = arr[i];
}
}
min = static_cast<int>(minFl);
max = static_cast<int>(maxFl);
avg = static_cast<int>(avgFl / N);
}
void setup()
{
Serial.begin(9600);
pinMode(A0, INPUT);
lcd.begin(16, 2);
lcd.print("Min | Mid | Max");
}
void loop()
{
static int minTemp;
static int avgTemp;
static int maxTemp;
Avg(Getterm(analogRead(A0)), minTemp, maxTemp, avgTemp);
Avg(Getterm(analogRead(A1)), minTemp, maxTemp, avgTemp);
Avg(Getterm(analogRead(A2)), minTemp, maxTemp, avgTemp);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1); lcd.print(minTemp);
lcd.setCursor(4, 1); lcd.print("|");
lcd.setCursor(6, 1); lcd.print(avgTemp);
lcd.setCursor(10, 1); lcd.print("|");
lcd.setCursor(12, 1); lcd.print(maxTemp);
delay(100);
}