繁体   English   中英

Arduino卡在简单的C ++函数中

[英]Arduino getting stuck in simple C++ function

我目前正在研究一个小的Arduino项目,该项目使用红外温度传感器测量某些表面温度。

硬件运行良好,并且使用analogRead()读取模拟信号也可以正常工作,但是使用此简单函数对测量的模拟值进行滤波以获得更好的结果只是与Arduino不兼容。

每次将运行此功能的草图上载到Arduino(Pro Micro)时,程序都会卡住并禁用Arduino,因此必须重新设置它,然后才能再次显示在“端口”菜单中作为COM端口。

这是我找不到错误的简单函数:

int TemperatureDifferenceSensor::measureRawFilteredTemperatureValue(int numberOfMeasurements) {
  int temperatureMeasurementValueSum = 0;
  int maxMeasuredTempValue = 0;
  int minMeasuredTempValue = 0;
  for (int i = 0; i < numberOfMeasurements; ++i) {
    int measuredTemperatureValue = analogRead(analogObjectTempPin);
    temperatureMeasurementValueSum += measuredTemperatureValue;
    if (measuredTemperatureValue > maxMeasuredTempValue) {
      maxMeasuredTempValue = measuredTemperatureValue;
    } else if (measuredTemperatureValue < minMeasuredTempValue) {
      minMeasuredTempValue = measuredTemperatureValue;
    }
    // A small delay, to not measure the same or similar value every time...
    delay(10);
  }
  temperatureMeasurementValueSum -= maxMeasuredTempValue;
  temperatureMeasurementValueSum -= minMeasuredTempValue;
  int temperatureMeasurementAverageValue = (int) (temperatureMeasurementValueSum / (numberOfMeasurements - 2));
  return temperatureMeasurementAverageValue;
}

如果模拟读取延迟按预期工作,则应该可以。 该函数的一个大问题是不能用参数2调用它。这将导致零除异常,并且可能还会出现黑洞。 为什么不这样:

... 
} // the for-loop closes here. 

if (numberOfMeasurements == 0)
  return 0;
// Must have at least 3 measurements in order to remove 2 of them.
else if (numberOfMeasurements > 2) 
{
  temperatureMeasurementValueSum -= maxMeasuredTempValue;
  temperatureMeasurementValueSum -= minMeasuredTempValue;
  numberOfMeasurements -= 2; // Compensate removing two measurements.
}

// Average is sum divided by measurements.
int temperatureMeasurementAverageValue = temperatureMeasurementValueSum / numberOfMeasurements;

return temperatureMeasurementAverageValue;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM