Помогите разобраться =(

Pterka
Offline
Зарегистрирован: 15.09.2018

Всем привет.

Попался мне скетч, загружаю, цепляю ардуинку на шилд - не работает.

Путем монитора сериала вычислил, что не работает часть после if. Что, при этом интересно, все условия под if и вложенными if выполняются. Но работает только часть, которая идет после else

if ( SupressJitter() ) {
    if ( ResistorOhms < 3500 ) {
     if (IsNear(buttonStableState,976,buttonJitter))
        {   // some button was depressed 
          longPress=false;
          if ( shortPress ) { 
            if ( shortPressLoopsCount==0 ) {
              shortPressLoopsCount=nShortPressLoopsToSend;
              buttonToPressNr=maps[pressedButtonNr][0];
              if ( buttonToPressNr>=10 ) {
                buttonToPressNr=buttonToPressNr-10;
                RingState=LOW;
              } else {RingState=HIGH;}
              outVoltage=outButtons[buttonToPressNr];
              sendCommand(RingState,outVoltage);             
            }
            shortPressLoopsCount--;
            if (shortPressLoopsCount==0) shortPress=false;
          }
          else {
            pressedButtonNr=-1;
            sendCommand(HIGH,outDepressedButtonsVoltage);             
          }
        }
        else {  //some button is pressed
          pressedButtonNr=getNearestResistorNr(ResistorOhms);
          shortPressLoopsCount=0;
          if ( buttonStateStableLoops < nShortPressLoops ) {
            // do nothing
          }
          else {
            if ( buttonStateStableLoops < nLongPressLoops ) {
              longPress=false;
              shortPress=true;
            }
            else  {
              longPress=true;
              shortPress=false;
              buttonToPressNr=maps[pressedButtonNr][1];
              if ( buttonToPressNr>=10 ) {
                buttonToPressNr=buttonToPressNr-10;
                RingState=LOW;
              } else {RingState=HIGH;}
              outVoltage=outButtons[buttonToPressNr];           
              sendCommand(RingState,outVoltage);             
            }
          }
       }
    }
  }  

То есть то, что после "some button is pressed" - работает, а то, что после "some button was depressed" - не хочет ни в какую =(

kalapanga
Offline
Зарегистрирован: 23.10.2016

Чудес не бывает. Если операторы после if не выполняются, а выполняются операторы после else, значит условие ложно. Проверяйте лучше.

bwn
Offline
Зарегистрирован: 25.08.2014

Serial.println(переменная в if), в помощь.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

У скетча есть автор. Наерно, он лучше разбираеца, как работает его поделие, чем мы здесь. Спрашивай его.

Pterka
Offline
Зарегистрирован: 15.09.2018

Всем спасибо за ответы.

Я понимаю, что чудес не бывает, а бывает косяк - прошу помощи в отыскании оного. Уже неделю бьюсь =(

Serial.println показывает, что все кучеряво - SupressJitter выполняется, сопротивление менее 3500 Ом, и даже IsNear меняется с нуля на единицу в момент отпускания кнопки... Вот только пичалько =(

Автор у скетча, конечно, есть, только в его теме на том форуме, где этот скетч был выложен "тишина на Ивановском кладбище" =( и последняя активность профиля в апреле 18го года. И да, в профиле никаких контактов сверх - не указано.

Pterka
Offline
Зарегистрирован: 15.09.2018

kalapanga, Ох, спасибо, добрый человек =) "в ту минуту" сказал - еще даже ответ не дописав понял, в чем ошибка была. Проверил - заработало =)