不打印传感器数据中的整个字符串

时间:2018-10-24 22:39:47

标签: c++ arduino

因此,我有两个传感器的设置,当我提示输入时,它们会捕获一组数据。

void loop() {
..
    else if (serialString == "5")
    {
        String outputString = returnMeasurements(3);
    }
}
String returnMeasurements(int sensorType)
{
  if (sensorType == 1 || sensorType == 3)
  {
   //do assay
    String NIRString = "SOME DATA HERE" // Gather data from sensor and append to NIRSTRING
  }

  if (sensorType == 2 || sensorType == 3)
  {
    //do assay
    String VISString = "SOME DATA HERE" // Gather data from sensor and append to VISSTRING
  }
  Serial.print("TEST");
  Serial.print(NIRString + VISString); //HERE IS WHEN THINGS SOMETIMES GO WRONG
  return  NIRString + VISString;
}

我已经大大简化了上面的代码,因此这里仅提供基本内容。

我的问题是,即使Serial.printreturn包含数据,有时NIRString语句上方的VISString语句也不显示任何内容。 (意味着什么也没返回)
它似乎是随机发生的,但是却经常发生。

我怀疑,由于NIRStringVISString是很长的字符串,因此它会占用内存吗?除此之外,我不知道怎么了。

1 个答案:

答案 0 :(得分:0)

  

可变阴影。

     

在计算机编程中,当在某个范围(决策块,方法或内部类)中声明的变量与在外部范围中声明的变量具有相同的名称时,就会发生变量遮蔽。

您尚未发布最少的工作示例,并且可能已省略了全局变量。但是,如果您能够编译它,那么它肯定在那里。删除两个全局变量声明:String NIRString;String VISString;。现在不会编译。但这也意味着您要在if块{}内更改完全不同的变量。

将变量尽可能保持局部。它不能在if(){块内; }。

String returnMeasurements(int sensorType)
{
  String result;

  if (sensorType == 1 || sensorType == 3)
  {
    //do assay
    result += "SOME DATA HERE"; // Gather data from sensor and append to NIRSTRING
  }

  if (sensorType == 2 || sensorType == 3)
  {
    //do assay
    result += "SOME DATA HERE"; // Gather data from sensor and append to VISSTRING
  }
  Serial.print("TEST");
  Serial.print(result); //HERE IS WHEN THINGS SOMETIMES GO WRONG
  return result;
}

但是,这在Arduino平台上占用了大量内存,因此完全不建议使用String串联。不错的文章:The Evils od Arduino Strings