ARDUINO Не реагирует кнопка при повторном нажатии

hazbat

✩✩✩✩✩✩✩
1 Мар 2026
1
0
К ардуино nano к пину 4 подключен модуль реле, к пину 3 кнопка. При нажатии на кнопку ардуино запускает модуль реле, но при повторном нажатии модуль реле не отключается, ардуино не реагирует. Заметил что при отключении питания от модуля реле, ардуино начинает реагировать при нажатии кнопки.
Подскажите где кроется проблема?
 

Вложения

Bruzzer

★★★★✩✩✩
23 Май 2020
774
235
@hazbat,
Если поведение зависит от того, подано питание на реле или нет, то скорее всего дело не в скетче, а в зависании или перезагрузке NANO. Или от помех срабатывания реле или реле неисправно, или еще что то в схеме не так.
 

viktor1703

★★★★✩✩✩
9 Дек 2021
799
202
При нажатии на кнопку ардуино запускает модуль реле, но при повторном нажатии модуль реле не отключается, ардуино не реагирует
Всё правильно, как прописали в коде, так Ардуино и работает
C++:
 if (butt2.isSingle()) {
    if (!relayState) {
      State = false;
      digitalWrite(REL4, State);
      digitalWrite(LED_BUILTIN, State);
      relayState = true;
      Serial.println("BTN3");
      Serial.println(State);
      delay(1700);

      if (!State) {
        State = true;
        digitalWrite(REL4, State);
        digitalWrite(LED_BUILTIN, State);
      Serial.println(State);
     }
    }
Изначально stateReley = 0, флаг State = 1, при нажатии на кнопку вы прописали:
C++:
Если (stateRele == 0)
{Сбросить State; // то есть = 0
  Выключить реле;
  Выключить светодиод;
  Поднять флаг stateReley; // то есть = 1
  Потом два сериала и задержка 1,7 с.
//Далее проверяете, а не сброшен ли флаг State?
Если (State == 0)
{
  Взвести State;
  Включить реле;
  Включить светодиод;
  Вывести в сериал состояние State;
}
}
Ну и всё, луп закончился и начинается снова опрос кнопок. И при следующем нажатии первым делом проверяется состояние stateReley, а оно после первого нажатия равно true, то есть 1, Вы же его нигде не сбрасываете. И всё, условие if (! stareReley) не выполняется и снова начинается опрос кнопок. Таким образом выключения реле в коде нет, только включение. Вы просто немного запутались с статусных флагах. После включения реле пропишите в коде сброс stateReley
 
Изменено:
  • Лойс +1
Реакции: bort707