Arduino:除非使用带有任何文本的Serial.println,否则该功能将无法运行

时间:2018-12-02 18:12:29

标签: function arduino interrupt

对于Arduino编程来说是很新的东西,所以我对以下代码中所做的事情很愚蠢表示歉意:)

我正在为自定义风速表编写函数。我有一个非常奇怪的“错误”:如果我在下面的代码的第41行注释掉,它只是其中包含任何文本的“ Serial.println”,wind函数将返回固定的号:8029.90。

另外,变量“ Perimetros”的求值结果为“ 0”,该结果为false,将导致函数“ wind”的返回值被分母除以0(因此是错误,而不是“ 0”)。

#include <time.h>

// Global Variables:
  // function: 'loop'
  int GeneralDelay = 1;
  float Wind;
  float Rain;
  int ticktockRain;
  String message;

  // function: 'wind'
  int RotateFirstTime = 0;
  int RotateLastTime = 0;
  int RotateTimeDelta = 0;
  float Aktina = 11.3;
  float ConvertedAktina = Aktina * 0.00001;
  float Perimetros = ConvertedAktina*2.0*3.14159;
  float RPM;
  int WindSensor = 8;
  int SampleTimeRPM = 5000;
  float tempWind;
  int flagWind = 0;
  int WindRunningTimeSTART = 0;
  int WindRunningTimeEND = 0;

void setup()
{
  Serial.begin(9600);
  pinMode(WindSensor, INPUT);
}

float wind(){
  WindRunningTimeSTART = millis();
  while (SampleTimeRPM > (WindRunningTimeEND- WindRunningTimeSTART)){
    //Serial.print("SampleTimeRPM =");
    //Serial.println(WindRunningTimeEND- WindRunningTimeSTART);
    WindRunningTimeEND = millis();
    if (digitalRead(WindSensor) == HIGH && flagWind == 0)
    {
      Serial.println("LITERALLY WHATEVER TEXT MAKES THIS CODE WORK");
      RotateFirstTime = millis();
      flagWind = 1;
    }
    if (digitalRead(WindSensor) == HIGH && flagWind == 1)
    {
      RotateLastTime = millis();
      flagWind = 0;
    }
    RotateTimeDelta = (RotateLastTime - RotateFirstTime);
    if (RotateTimeDelta > 0 && flagWind == 0)
    {
      RPM = (3600000/RotateTimeDelta*3.14159*1*Perimetros);
      tempWind = RPM;
      RPM = 0.0;
    }
  }
  return(tempWind);
}

void loop(){
  Wind = wind();
  Serial.print("Wind: ");
  Serial.println(Wind);
}

如果我只是取消注释该特定行并使用其中的任何文本(空文本不起作用)执行“ Serial.println()”,则所有计算,操作和函数“ wind”的一般逻辑完美执行且100%正确!!

我的问题是:“数字阅读”是否受到“ Serial.print”或“ Serial.println”功能的任何影响?

预先感谢您对这个奇怪的问题提出的建议,对不起,如果我要提出明显的要求!

0 个答案:

没有答案