// Подключаем две библиотеки для работы с LCD и математических вычислений
#include <LiquidCrystal.h>
#include <math.h>
// Инициализируем объект-экран, передаём использованные
// для подключения контакты на Arduino в порядке:
// RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
void setup(void)
{
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
}
// Функция для перевода показаний датчика в градусы Цельсия
float Getterm(int RawADC)
{
float celsius = 1 / (log(1 / (1023. / RawADC - 1)) / 3950 + 1.0 / 298.15) - 273.15;
return celsius;
}
float avgTemps1 = 0;
float avgTemps2 = 0;
float avgTemps3 = 0;
float maxTemp = 0;
float minTemp = 0;
float avgTemp = 0;
int count = 0;
const int countMeasurements = 10;
float findMax(float avgTemps1, float avgTemps2, float avgTemps3)
{
float maxTemp = 0;
if (avgTemps1 > avgTemps2)
{
if (avgTemps1 > avgTemps3)
{
maxTemp = avgTemps1;
}
else
{
maxTemp = avgTemps3;
}
}
else if (avgTemps2 > avgTemps1)
{
if (avgTemps2 > avgTemps3)
{
maxTemp = avgTemps2;
}
else
{
maxTemp = avgTemps3;
}
}
else
{
if (avgTemps3 > avgTemps1)
{
maxTemp = avgTemps3;
}
else
{
maxTemp = avgTemps1;
}
}
return maxTemp;
}
float findMin(float avgTemps1, float avgTemps2, float avgTemps3)
{
float minTemp = 0;
if (avgTemps1 < avgTemps2)
{
if (avgTemps1 < avgTemps3)
{
minTemp = avgTemps1;
}
else
{
minTemp = avgTemps3;
}
}
else if (avgTemps2 < avgTemps1)
{
if (avgTemps2 < avgTemps3)
{
minTemp = avgTemps2;
}
else
{
minTemp = avgTemps3;
}
}
else
{
if (avgTemps3 < avgTemps1)
{
minTemp = avgTemps3;
}
else
{
minTemp = avgTemps1;
}
}
return minTemp;
}
float findAvg(float avgTemps1, float avgTemps2, float avgTemps3)
{
float avgTemp = (avgTemps1 + avgTemps2 + avgTemps3) / 3;
return avgTemp;
}
// Функция для вывода на экран показаний датчика
void printTemp(const float maxTemp, const float minTemp, const float avgTemp)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tmax Tmin Tavg:");
lcd.setCursor(0, 1);
lcd.print(maxTemp);
lcd.print(" ");
lcd.print(minTemp);
lcd.print(" ");
lcd.print(avgTemp);
lcd.print(" ");
}
void loop(void)
{
float temp1 = Getterm(analogRead(A0)); // считываем показания датчика
float temp2 = Getterm(analogRead(A1)); // считываем показания датчика
float temp3 = Getterm(analogRead(A3)); // считываем показания датчика
if (count < countMeasurements)
{
avgTemps1 += temp1;
avgTemps2 += temp2;
avgTemps3 += temp3;
}
else
{
avgTemps1 /= countMeasurements;
avgTemps2 /= countMeasurements;
avgTemps3 /= countMeasurements;
maxTemp = findMax(avgTemps1, avgTemps2, avgTemps3);
minTemp = findMin(avgTemps1, avgTemps2, avgTemps3);
avgTemp = findAvg(avgTemps1, avgTemps2, avgTemps3);
printTemp(maxTemp, minTemp, avgTemp); // вывод температуры на экран
count = 0;
avgTemps1 = 0;
avgTemps2 = 0;
avgTemps3 = 0;
}
++count;
delay(100);
}