Вопрос по сравнению(IF)

ViDi79

✩✩✩✩✩✩✩
1 Окт 2023
10
0
Всем привет. Подскажите. При написание скетча наткнулся на проблему. Возможно есть ограничение какие то о которых я не знал.

Описание: Джостик от PS2 подключен к аналоговому порту.
Как задумывалось: Двигая джостик до упора в лево или право, если проходит грани (200 и 600) в Порте начинает выдавать "Х"(это сделал, чтоб понять, что сравнение прошло)
Задумывалось, чтоб Джостик работал как триггер на (вкл/выкл)

if (analogRead(JosticX) <= 200 && analogRead(JosticX) >= 600){Serial.print("X");}

Почему то сравнение не происходи. Какие только варианты я не пробовал. И проверил, что точно попадаю в диапазон. 400 Ждостик на середине.
И с map пробовал, чтоб 1 2 3 только было. И analogRead(JosticX)выносил с IF, а в if только переменную вписывал. Может от Джостика данные не сравнивает? Или я че то упустил. может какие то не состыковки из за библиотек к примеру servo.h В общем, ребят кто натыкался и как то решил эту проблему подскажите, как?
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,847
595
44
Вам нужно использовать логическое ИЛИ:
analogRead(JosticX) <= 200 || analogRead(JosticX) >= 600
"Если позиция меньше 200 ИЛИ больше 600"
 

ViDi79

✩✩✩✩✩✩✩
1 Окт 2023
10
0
Спаси все работает!
Странно я вроде пробовал ИЛИ ставить, два дня бьюсь с этим сравнением уже всякое перепробовал.
Все равно Спасибо, работает.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,847
595
44
@ViDi79, При составлении условия пробуйте его проговаривать, это упрощает понимание что получится в итоге. Да и лишние скобки не помешают и улучшат понимание приоритетов при работе условия.
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
546
134
if (analogRead(JosticX) <= 200 && analogRead(JosticX) >= 600){Serial.print("X");}

Почему то сравнение не происходи.
Очень даже происходит, ведь значение не может быть меньше либо равно, чем 200 И одновременно больше либо равно, чем 600. Условие не выполняется и в serial ничего не шлётся.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,847
595
44
@viktor1703, Данное условие может сработать, если по какой то неведомой причине при последовательных замерах analogRead() даст подходящие значения. :ROFLMAO:

@ViDi79, И да, как правило подобные условия пишут с предварительным присваиванием в отдельную переменную, т.к. analogRead() занимает довольно много времени.
C++:
int position = analogRead(JosticX);
if (position <= 200 || position >= 600) {
    Serial.print("X");
}