Помогите пожалуйста с кодом, я собрал небольшую схему но не как не могу написать код, выдает ошибку. Собрал схему на управление 2-ух разных светодиодов 2-мя кнопками. С обычным кодом все получается а чтобы устранить дребезг нет.
Код (C++): const int LED=10; // Контакт 10 для подключения светодиода const int BUTTON=2; // Контакт 2 для подключения кнопки int tekButton = LOW; // Переменная для сохранения текущего состояния кнопки int prevButton = LOW; // Переменная для сохранения предыдущего состояния // к нопки boolean ledOn = false; // Текущее состояние светодиода (включен/выключен) void setup() { // Сконфигурировать контакт светодиода как выход pinMode (LED, OUTPUT); // Сконфигурировать контакт кнопки как вход pinMode (BUTTON, INPUT); } // Функция сглаживания дребезга. Принимает в качестве // аргумента предыдущее состояние кнопки и выдает фактическое. boolean debounce(boolean last) { boolean current = digitalRead(BUTTON); // Считать состояние кнопки, if (last != current) // если изменилось... { d elay(5); // ж дем 5 м с current = digitalRead(BUTTON); // считываем состояние кнопки return current; // возвращаем состояние кнопки } } void loop() { tekButton = debounce(prevButton); if (prevButton == LOW && tekButton == HIGH) // если нажатие... { ledOn = !ledOn; // инвертировать значение состояния светодиода } prevButton = tekButton; digitalWrite(LED, ledOn); // изменить статус состояния светодиода }
100-500пф параллельно кнопке запаять - и проблема дребезга решена ну и до кучи прогрммно отсекать повторные нажатия в течении 10мс
бред крутого программиста Не спорю, идея неплохая. но совершенно лишено хоть какой-нибудь наглядности и хорошего стиля программирования. Новичкам не рекомендуется
Саня_76, уточните, какие конкретно проблемы у вас с кодом? Пока вижу. что в функции debounce собственно дебонса то и нет.
А в чем бред то? Вы хоть разобрались? Для новичков пример лежит - скопировал - и забыл. Код минимален, короче не получится, хоть в прерывание вставляй. В свое время перетаскивал с ассемблера, когда выкладывал на сайт, убрал структуры с указателями на функции, чтобы для новичков понятней было, изначально код был с оптимизирован на кол-во команд процессора, дабы код прерывания короче был. Когда выложил, один товарищ через 5 минут критиковать начал, не думаю, что он понял даже суть за это время.
Использую данный вариант устранения дребезга уже много лет, в основном в прерываниях от таймера - никаких задержек (все входы параллельно обрабатываются), никаких сбоев. Даже в обработке наличия полупериодов сети на нескольких входах используется, и прекрасно работает.
лучше всего в каждом конкретном случае выбирать наиболее оптимальный вариант тк порой бороться с дребезгом и вовсе нет смысла - тогде и нет смысла в любых методах борьбы а порой надо 100% защиту - тогда уж и вкупе... но в большинстве случаев при использовании маломощных мк, аппаратное решение будет более целесообразней...(ИМХО)