Arduino:如果else声明,是否所有数字都在范围内,如果至少一个不是?

时间:2018-06-26 19:10:59

标签: arduino

我有4个变量将被填充,如果所有数字都在一定范围内,则它们位于死区中。如果至少一个超出范围,则引发else语句。

我的问题是,有时当所有数字都在范围内时,else语句就会出现,而我不确定为什么。

boolean isPushed(int x1, int y1, int x2, int y2)
{
    //460 TO 533 is the deadzone
    //joysticks must be outside of this range to be considered pushed
    boolean pushed;
    int minZone = 420;
    int maxZone = 533;

    Serial.println("*****************");
    if ((analogRead(X_pin_1) >= minZone && analogRead(X_pin_1) <= maxZone) &&
        (analogRead(X_pin_2) >= minZone && analogRead(X_pin_2) <= maxZone) &&
        (analogRead(Y_pin_1) >= minZone && analogRead(Y_pin_1) <= maxZone) &&
        (analogRead(Y_pin_2) >= minZone && analogRead(Y_pin_2) <= maxZone))
    { 
        Serial.println("NOT PUSHED. Inside deadzone.");
        pushed = false;
    }
    else 
    { 
        pushed = true; 
        Serial.println("PUSHED");
        Serial.print("X1 = ");
        Serial.println(analogRead(X_pin_1));
        Serial.print("Y1 = ");
        Serial.println(analogRead(Y_pin_1));
        Serial.print("X2 = ");
        Serial.println(analogRead(X_pin_2));
        Serial.print("Y2 = ");
        Serial.println(analogRead(Y_pin_2));
    }

    return pushed;
}

例如,这是输出之一:

*****************
PUSHED
X1 = 495
Y1 = 481
X2 = 478
Y2 = 530
***************

请告诉我为什么!

1 个答案:

答案 0 :(得分:3)

您将在不同的时间间隔多次读取每个引脚,因此同一引脚在每次读取时可能具有不同的值。

相反,您应该在if语句之前将每个引脚的值存储在变量中:

int val_x_pin_1 = analogRead(X_pin_1);
...

然后在代码的其余部分(也在您的print语句中)中使用这些变量:

if ((val_x_pin_1 >= minZone && val_x_pin_1 <= maxZone)
   && ...