Arduino - 等待功能导致数量增加

时间:2015-04-02 18:42:23

标签: function floating-point arduino return

我有一个函数filledFunction(),它返回一个浮点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个名为fillLeveltofill的数字。相反,我得到了一个类似值的重复序列:

http://i.imgur.com/Y9Wu8P2.png

前两个值是正确的(410.93 + 89 = 500),但我不知道以下60个值,并且不属于那里。

我正在使用arduino nano

1 个答案:

答案 0 :(得分:0)

filledFunction()函数仅在FreqMeasure.available()返回truecount > 30时才返回值。正如this question的答案中所述,C89,C99和C11标准都表示函数的默认返回值是未定义的(即如果函数在不执行return语句的情况下完成)。这实际上意味着任何事情都可能发生,例如输出任意数字。

此外,您所看到的输出开始正确'其中一个数字从500中减去,即使它们具有奇怪的值,例如11699.00-11199(等于500 - 11699.00)。然而,在输出中降低这似乎打破了,原因是在Arduino Nano上int只能保持数字32767,因此减法的结果太大而且&# 39;溢出'是一个很大的负数。

修复filledFunction()函数,即使FreqMeasure.available()falsecount <= 30,也要显式返回值,并确保它不能返回大于{的数字{1}}可能会解决这些问题。