РЕШЕНО (00 | 0) != 0(byte)

Тема в разделе "Arduino & Shields", создана пользователем WhiteFox, 6 май 2021.

  1. WhiteFox

    WhiteFox Нерд

    10 | 1 = 3, работает
    10 | 0 = 2, работает
    00 | 1 = 1, работает
    00 | 0 = 0, не работает
    Когда сравниваю 2 false побитовым ИЛИ, то переменная position = ничему...
    Как это исправить, чтобы position = 0?

    Код (C++):
    byte prePosition;

    ISR(TIMER5_OVF_vect)
    {
      byte position = ((1 << digitalRead(45)) | digitalRead(46));
     
      if(prePosition != position){
        prePosition = position;
        Serial.println(position);
      }
    }
     
  2. SergeiL

    SergeiL Оракул Модератор

    А как ОНО должно работать?
    00 | 0 будет 0
    Вы понимаете что делается в этой строке?
    Код (C++):
    ((1 << digitalRead(45)) | digitalRead(46));
    Если вы считываете "0" на 45 и 46 входе, данная строка вам вернет "1"
    А эта:
    Код (C++):
    ((digitalRead(45) << 1) | digitalRead(46));
    при "0" на 45 и 46 входе, вернет "0"
     
  3. WhiteFox

    WhiteFox Нерд

    Большое спасибо.