为什么使用对数时显示Esp32“ nan”?

时间:2019-05-25 10:01:48

标签: arduino serial-port logarithm arduino-ide esp32

我正在用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);
}

1 个答案:

答案 0 :(得分:0)

我不是数学家,但问题在于数字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)