Почему отображается Esp32 "nan" при использовании логарифма? - PullRequest
0 голосов
/ 25 мая 2019

Я строю метеостанцию ​​с 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 голосов
/ 25 мая 2019

Я не математик, но проблема заключается в числе 1023. Это разрешение 10 бит, используемое большинством Arduino (Uno, Mega).ESP32 имеет разрешение 12 бит, что дает число 4095. Итак, замените 1023 на 4095, потому что ESP32 будет генерировать числа от 1023 до 4095.

R2 = R1 * (4095/ (float)Vo - 1.0);

Небольшой совет: c3*logR2*logR2*logR2 можно записать как c3*pow(logR2 ,3)

...