我有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
***************
请告诉我为什么!
答案 0 :(得分:3)
您将在不同的时间间隔多次读取每个引脚,因此同一引脚在每次读取时可能具有不同的值。
相反,您应该在if
语句之前将每个引脚的值存储在变量中:
int val_x_pin_1 = analogRead(X_pin_1);
...
然后在代码的其余部分(也在您的print
语句中)中使用这些变量:
if ((val_x_pin_1 >= minZone && val_x_pin_1 <= maxZone)
&& ...