Arduino - 等待功能导致数字堆积
Arduino - waiting on function causes a number pile-up
我有一个函数 filledFunction()
returns 一个浮点数 filled
:
float filledFunction(){
if (FreqMeasure.available()) {
sum = sum + FreqMeasure.read();
count = count + 1;
if (count > 30) {
frequency = FreqMeasure.countToFrequency(sum / count);
a = frequency * x;
b = exp (a);
c = w * b;
d = frequency * z;
e = exp (d);
f = y * e;
float filled = c + f;
sum = 0;
count = 0;
return filled;
}
}
}
当我用
调用这个函数时
while (1){
fillLevel = filledFunction();
int tofill = 500 - fillLevel;
Serial.print("fillLevel: ");
Serial.println(fillLevel);
Serial.print("tofill: ");
Serial.println(tofill);
串口监视器应该输出两个加起来为 500 的数字,名为 fillLevel
和 tofill
。相反,我得到了相似值的重复序列:
http://i.imgur.com/Y9Wu8P2.png
前两个值是正确的 (410.93 + 89 = 500),但后面的 60 个值我不知道,不属于那里。
我正在使用 arduino nano
如果 FreqMeasure.available()
return 和 true
AND count > 30
,filledFunction()
函数仅 return 是一个值。正如 this question 的答案中所述,C89、C99 和 C11 标准都说函数的默认 return 值是未定义的(也就是说,如果函数在没有执行 return
语句的情况下完成).这真的意味着任何事情都可能发生,例如输出任意数字。
此外,您看到的输出从 'correct' 开始,其中一个数字从 500
中减去,即使它们具有奇怪的值,例如 11699.00
和 -11199
(等于 500 - 11699.00
)。然而,在输出的下方,这似乎崩溃了,原因是在 Arduino Nano 上,int
最多只能容纳 32767
的数字,因此减法的结果太大并且 'overflows' 是一个大的负数。
修复 filledFunction()
函数以显式 return 一个值,即使 FreqMeasure.available()
是 false
或 count <= 30
并确保它不能 return 大于 500
的数字可能会解决这些问题。
我有一个函数 filledFunction()
returns 一个浮点数 filled
:
float filledFunction(){
if (FreqMeasure.available()) {
sum = sum + FreqMeasure.read();
count = count + 1;
if (count > 30) {
frequency = FreqMeasure.countToFrequency(sum / count);
a = frequency * x;
b = exp (a);
c = w * b;
d = frequency * z;
e = exp (d);
f = y * e;
float filled = c + f;
sum = 0;
count = 0;
return filled;
}
}
}
当我用
调用这个函数时while (1){
fillLevel = filledFunction();
int tofill = 500 - fillLevel;
Serial.print("fillLevel: ");
Serial.println(fillLevel);
Serial.print("tofill: ");
Serial.println(tofill);
串口监视器应该输出两个加起来为 500 的数字,名为 fillLevel
和 tofill
。相反,我得到了相似值的重复序列:
http://i.imgur.com/Y9Wu8P2.png
前两个值是正确的 (410.93 + 89 = 500),但后面的 60 个值我不知道,不属于那里。
我正在使用 arduino nano
如果 FreqMeasure.available()
return 和 true
AND count > 30
,filledFunction()
函数仅 return 是一个值。正如 this question 的答案中所述,C89、C99 和 C11 标准都说函数的默认 return 值是未定义的(也就是说,如果函数在没有执行 return
语句的情况下完成).这真的意味着任何事情都可能发生,例如输出任意数字。
此外,您看到的输出从 'correct' 开始,其中一个数字从 500
中减去,即使它们具有奇怪的值,例如 11699.00
和 -11199
(等于 500 - 11699.00
)。然而,在输出的下方,这似乎崩溃了,原因是在 Arduino Nano 上,int
最多只能容纳 32767
的数字,因此减法的结果太大并且 'overflows' 是一个大的负数。
修复 filledFunction()
函数以显式 return 一个值,即使 FreqMeasure.available()
是 false
或 count <= 30
并确保它不能 return 大于 500
的数字可能会解决这些问题。