#include <LiquidCrystal.h>
const float Vref = 1.1;
const int ADC_resolution = 10;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
float calculateTemperature(float voltage) {
float temperatureThresholds[] = {0.174, 0.299, 0.424, 0.549, 0.674, 0.799, 0.924, 1.049, 1.20525};
int temperatureValues[] = {-40, -30, -20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80};
int index = 0;
while (index < sizeof(temperatureThresholds) / sizeof(temperatureThresholds[0]) && voltage > temperatureThresholds[index]) {
index++;
}
if (index > 0) {
float interpolationFactor = (voltage - temperatureThresholds[index - 1]) / (temperatureThresholds[index] - temperatureThresholds[index - 1]);
return temperatureValues[index - 1] + interpolationFactor * (temperatureValues[index] - temperatureValues[index - 1]);
}
return -40; // القيمة الافتراضية عند عدم وجود بيانات
}
int adc[] = {100, 200, 400, 500, 880, 710};
void setup() {
Serial.begin(115200);
lcd.begin(16, 2);
lcd.clear();
}
void loop() {
for (int value : adc) {
float voltage = value * Vref / (pow(2, ADC_resolution) - 1);
float temperature = calculateTemperature(voltage) + 0.5; // إضافة 0.5 للتقريب
lcd.setCursor(0, 0);
lcd.print("ADC="); lcd.print(value);
lcd.setCursor(10, 0);
lcd.print(round(voltage * 1000)); lcd.print("mV");
lcd.setCursor(1, 1);
lcd.print("Temp="); lcd.print(temperature); lcd.print((char)223); lcd.print("C");
delay(2000);
}
}