защита от дребезга
- Войдите на сайт для отправки комментариев
Вс, 15/06/2014 - 07:36
кто и как использует програмно защиту от дребезка (куча новых переменных добавление в код делей или мучится с миллес), многих это отпугивает, предлогаю простое решение всего пару строк в коде.
bool b=0; bool s=0; unsigned long d=0; void setup() { pinMode(4, INPUT); } void loop() { bool e=(digitalRead (4));if(b){if(millis()>=(d+50)){s=e;b=0;}} else{if(e!=s){b=1;d=millis();}} // значение s то 4 пина с защитой от дребезка }
кнопка на 4 контакте с простым подтягивающим резистором, время выдержки 50мск (если контакты плохие можно и увеличить), значение s это истина или лож по кнопке, код можно дублировать только переменные надо присваивать другие.
чем ваш велосипед лучше?
Если есть "родная" библиотека. Пример https://github.com/thomasfredericks/Bounce-Arduino-Wiring/blob/master/Bo...
vov4ik, Можно сделать еще "короче", если всё в одну строку написать, про остальное уже сказали.
а вот и нет, 404 XD
Хотелось бы узнать комментарии опытных разработчиков arduino по поводу такого кода; отлавливается две операции: короткое нажатие (до 3 секунд) и длинное (более):
А как быть, если это не единственная кнопка, а покупная матричная клавиатура или полтора десятка кнопок, включенных для экономии пинов через регисторный расширитель входов?
Если программировать микроконтроллер клавиатуры, то, наверное, такой способ не годится, но у меня частный случай, происходят некоторые процессы (чтение данных из UART, запись из на SD-карту) и мне надо иметь возможность передать пару-тройку команд (закрыть файл, остановить запись, выждать паузу для замены карты в разъеме), то хотелось бы одну кнопку поставить и ей одной как-то правильно кликать.
Не уверен, но думаю, что, в принципе, для примера с SD-картой, можно выдернуть из UART-а девайс, скриптом отловить это событие и если Serial.read() == -1, то закрыть файл (сбросить буферы) и проделать нужные действия, то есть, обойтись без кнопки вообще. Но мне интересна идея одной кнопки. И еще беспокоит, не повлияет ли такая обработка кликов на процесс синхронизации данных при записи их на SD-карту из loop()?
Я еще ничего не кодил и не тестил, плата придет через неделю-две, хотелось бы заранее изучить информацию... Но тут получается: один пишет о "подтягивающих" резисторах, то ли "вверх", то ли "вниз", другой его поправляет и сообщает, что встроенные на то и нужны, а третий предоставляет код, который не читается и вообще писать такое стыдно жаде на первом курсе института:
bool
b=0;
bool
s=0; unsigned
long
d=0;
Я еще ничего не кодил и не тестил, плата придет через неделю-две, хотелось бы заранее изучить информацию... Но тут получается: один пишет о "подтягивающих" резисторах, то ли "вверх", то ли "вниз", другой его поправляет и сообщает, что встроенные на то и нужны, а третий предоставляет код, который не читается и вообще писать такое стыдно жаде на первом курсе института:
bool
b=0;
bool
s=0; unsigned
long
d=0;
О кнопках на форуме написаны "вагон и маленькая тележка". Если аппаратная часть больше интересует, можете прочесть "Сагу о кнопках", если программная - "Титановый велосипед...". Да и в других темах эти вопросы часто поднимались, включая варианты с использованием прерываний и таймеров. За неделю-две вполне можно освоить. При этом нужно учитывать, что форум не учебник. Каждый может высказываться в силу своих как убеждений, так и заблуждений. Т.е. нужно осмысленно подходить, фильтровать.