Всем привет! Подскажите начинающему, зачем такая конструкция используется для обработки нажатия кнопки? Почему не просто if else, на антидребезг не похоже.. bool btnState = false; void loop() { // put your main code here, to run repeatedly: stepper.tick(); // кнопка нажата if (!digitalRead(A0) && !btnState) { btnState = true; stepper.setCurrent(0); stepper.setTarget(128000); } // кнопка отпущена if (digitalRead(A0) && btnState) { btnState = false; stepper.stop(); // stepper.brake(); }

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

  1. Anonim

    Флэш, зачастую, деградирует быстрей еепрома. Вкупе с блочным затиранием (про запись не уверен. Как минииум на стм32 можно писать отдельные байты, а стирать только блоками) это даёт преимущество еепрому в частой записи отдельных байт. Чтобы уменьшить эффект деградации, для флэша есть способы (у меня для стм32 написана либа) "размазывания" операций записи по блокам (wear levelling) Похоже как раз на антидребезг. В простейшем варианте. Но тут явно не хватает ещё пары условий или куска, где выставляется btnState вне приведенных условиях

    • Andrey

      так вот то и смутило, по логике работы получается практически условие по состоянию кнопки, только вместо if else два if сделали. Для антидребезга хоть какой нибудь delay нужен

      • Denis

        Ардуинщики, хуле с них взять...))

      • Anonim

        Возможно, у автора на девайсе стоит некий аппаратный фильтр (rc-цепь, например), который берет антидребезг на себя. А код остался таким, типа 'работает - не трожь'. Больше смущает что комбинаций btnState и analogRead() четыре, а условия два. Либо тут упущены ещё две комбинации (и, соответственно, упущен один-два if'a), либо где-то в другом месте кода есть присвоение чего-то переменной btnState Наводящими вопросами говоря: что будет, если btnState != analogRead()? В приведенном коде эта ситуация не просматривается

        • Andrey

          Это весь код, больше ничего нет (ну там только настройки выше еще). Пример из "комплекта" к библиотеке, демонстрация работы функционала так вот и получается в холостую цикл проходит. Только stepper.tick() выполняется

        • Anonim

          Так и должно быть, если это весь код Пардон, не analogRead, а digitalRead, конечно же

          • Vassili

            Должно быть так, чтобы код без надобности не прогонялся. В идеале - полный отказ от основного цикла, и выполнение необходимого в прерываниях, и строго по необходимости

            • Anonim

              И DMA )

              • Vassili

                Это для меня слишком. Это же про пк?

                • Anonim

                  Во многих МК тоже есть

                  • Vassili

                    Я и не представляю как иначе можно в МК... Я сохраняю и достаю байты по известным адресам.

                    • Anonim

                      DMA контроллеру говоришь те же самые адреса и он делает это в фоне

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

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

Ребят скажите стоит для себя поклеить сапфировое стекло с тачем на se2 ? А то обычное не надолго хватает . Или игра не стоит... Читать далее