Всем привет! Подскажите начинающему, зачем такая конструкция используется для обработки нажатия кнопки? Почему не просто 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
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 контроллеру говоришь те же самые адреса и он делает это в фоне