对于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”功能的任何影响?
预先感谢您对这个奇怪的问题提出的建议,对不起,如果我要提出明显的要求!