Arduino: Если еще оператор, если все числа находятся в диапазоне, если хотя бы один нет? - PullRequest
0 голосов
/ 26 июня 2018

У меня есть 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 голосов
/ 26 июня 2018

Вы читаете каждый вывод несколько раз в разные промежутки времени, поэтому один и тот же вывод может иметь разное значение каждый раз, когда вы читаете его.

Вместо этого вы должны хранить значение каждого вывода в переменной до оператора if:

int val_x_pin_1 = analogRead(X_pin_1);
...

А затем используйте эти переменные в остальной части кода (также в ваших print инструкциях):

if ((val_x_pin_1 >= minZone && val_x_pin_1 <= maxZone)
   && ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...