为什么使用对数时显示 Esp32 "nan"?
Why displays the Esp32 "nan" when using logarithem?
我正在用 Esp32 和热敏电阻建造一个气象站。我想以摄氏度显示值。对于计算我需要对数但是当我使用它时,它总是显示 "nan".
int ThermistorPin = 27;
int Vo;
float R1 = 10000;
float logR2, R2, T, Tc, Tf;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;
void setup() {
Serial.begin(115200);
}
void loop() {
Vo = analogRead(A0);
R2 = R1 * (1023.0 / (float)Vo - 1.0);
logR2 = log(R2);
Serial.println(logR2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
Tc = T - 273.15;
Serial.print("Temperature: ");
Serial.print(Tc);
Serial.println(" C");
delay(500);
}
我不是数学家,但问题在于数字 1023。这是大多数 Arduino(Uno、Mega)使用的 10 位分辨率。
ESP32 的分辨率为 12 位,给出了数字 4095。
因此,将 1023 替换为 4095,因为 ESP32 将生成大于 1023 的数字,最多为 4095。
R2 = R1 * (4095/ (float)Vo - 1.0);
小提示:c3*logR2*logR2*logR2
可以写成c3*pow(logR2 ,3)
我正在用 Esp32 和热敏电阻建造一个气象站。我想以摄氏度显示值。对于计算我需要对数但是当我使用它时,它总是显示 "nan".
int ThermistorPin = 27;
int Vo;
float R1 = 10000;
float logR2, R2, T, Tc, Tf;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;
void setup() {
Serial.begin(115200);
}
void loop() {
Vo = analogRead(A0);
R2 = R1 * (1023.0 / (float)Vo - 1.0);
logR2 = log(R2);
Serial.println(logR2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
Tc = T - 273.15;
Serial.print("Temperature: ");
Serial.print(Tc);
Serial.println(" C");
delay(500);
}
我不是数学家,但问题在于数字 1023。这是大多数 Arduino(Uno、Mega)使用的 10 位分辨率。 ESP32 的分辨率为 12 位,给出了数字 4095。 因此,将 1023 替换为 4095,因为 ESP32 将生成大于 1023 的数字,最多为 4095。
R2 = R1 * (4095/ (float)Vo - 1.0);
小提示:c3*logR2*logR2*logR2
可以写成c3*pow(logR2 ,3)