ребята подскажите пж как в коде реализовать if( digitalRead(MyRoom_button2)==LOW && MyRoom_flag2 == 0) { MyRoom_flag2=1; delay(50); } if( digitalRead(MyRoom_button2)==LOW && MyRoom_flag2 == 1) { delay(50); digitalWrite(MyRoom_relay, !digitalRead(MyRoom_relay)); MyRoom_flag2=0; } мне нужно чтоб по протяжению 3-х секунд если кнопка не была повторно нажата флаг обнулился

Комментарии: 18

  1. Anonim

    кнопку вешаешь на прерывание, в прерывании выставляешь флаг и фиксируешь millis дета в переменной в лупе сравниваешь, обрабатываешь, наслаждаешься я так делал например, удобненько

    • Sifun

      стоит понимать что датчики кислорода имеют срок жизни и хранение и использование расходует его

    • Loool

      ну если я в лупе буду сравнивать это выходит не оч удобно ибо если не успеваешь в тайминг лупа нажать тогда выходит хрень одним словом. я вот думаю может запуск отдельной функции на отсчет чтоб отсчет работал не постоянно а при первом нажатие

      • Anonim

        не-не, тайминг лупа побоку, у тебя флаг выставляется в интеррапте

        • Sifun

          базово датчик кислорода это банальная батарейка использующая кислород из атмосферы на катализаторе как окислитель для электрохимической реакции

          • Anonim

            и к следующему проходу он уже выставится и время зафиксируется минус сходу только один, если луп долгий - до обработки нажатия может пройти некоторое время, пока до нужного места не дотопает

            • Anonim

              А как прерывания в ардуино иде обрабатывать? Там есть упрощённый интерфейс для этого?

              • Anonim

                нипанимать что есть обрабатывать

                • Anonim

                  Ну как «повесить кнопку на прерывание»?

                  • Anonim

                    пин задефайнил, ф-цию напейсал, на пин хендлер навесил, фсьо

                    • Anonim

                      https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/

                      • Anonim

                        const byte interruptPin = 14; void enableBacklight(){ enableBacklit=1; } в сетапе: pinMode(interruptPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin), enableBacklight, RISING);

                        • Anonim

                          Да, я про аттач интеррапт спрашивал. Спасибо

                          • Anonim

                            велкам, чо

                      • Anonim

                        Не знал, интересно почему в туториялах для детей этого нет. Может, я недостаточно глубокие туторы смотрел

                        • Anonim

                          типа такого

          • Beron

            в общем то так но параметры будут очень размытые и завтсеть от много чего пока применю датчик что привел выше путем сравнения что на улице и в комнате

Не нашли ответ?

Вам также может быть интересно