Boolean и оператор if...else

Тема в разделе "Arduino & Shields", создана пользователем Jogovskiy, 11 янв 2021.

  1. fogary

    fogary Гик

    Может глупость скажу, но проверьте так:
    Код (C++):
    if( (digitalRead(PIR) == LOW) && (digitalRead(button) == LOW) && (digitalRead(LED) == HIGH) ) {
    Ваш код можно так упростить:
    Код (C++):
    void loop() {
      if(digitalRead(button) == HIGH){
        if(flag == LOW){
          digitalWrite(LED, !digitalRead(LED));
        }
        flag = HIGH;
        return;
      }
      flag = LOW;
     
      digitalWrite(LED, digitalRead(PIR));
    }
     
     
    Последнее редактирование: 14 янв 2021
  2. parovoZZ

    parovoZZ Гуру

    В таких конструкциях проверка идёт до первого верного условия. Так что надо аккуратно расставлять операнды.
     
  3. a1000

    a1000 Гик

    Да ладно, там же "И" стоит. Как я понимаю нужно что-бы все условия выполнились.
    Вот если-бы там было "ИЛИ".....:)
     
    Jogovskiy нравится это.
  4. a1000

    a1000 Гик

    Это переменная которой мы фиксируем наступления какого либо события. В данном конкретном случае состояние 1 говорит нам, что мы включили свет с помощью кнопки. Затем здесь
    Код (C++):
    if(digitalRead(PIR)== HIGH && !flag)
      {
       ledOn = HIGH;
      }
      if(digitalRead(PIR)== LOW && !flag)
      {
       ledOn = LOW;
      }
    мы это проверяем. Если состояние флага 1, выполнение данных условий блокируется и датчик движения не может изменять состояние переменной ledOn.
     
  5. Jogovskiy

    Jogovskiy Нерд

    Спасибо большое! Понял, принял, применяю!
     
  6. parovoZZ

    parovoZZ Гуру

    да, тупанул))
    Значит, не верного условия. Т.е. ПИР = HIGH, уходим на else без следующих проверок.