tiny13 и время нажатия кнопки
- Сообщения: 6
- Зарегистрирован: Вс ноя 26, 2017 22:11:30
Требуется определить как долго была нажата кнопка. Так-же надо исключить дребезг - просто не учитывать как несколько отдельных нажатий. Перед нажатием тинька может находится в спящем режиме. Delay не используем - если только как антидребезг. Пока требуется просто отличать короткое нажатие от длинного. При этом должна выполняться основная программа. Если потребуются уточнения..............
- Реклама
насколько точно требуется замерять длительность нажатия?
Добавлено after 1 minute 19 seconds:
что ещё будет в тиньке (с кем, например придется делить таймер или прерывания)
Добавлено after 1 minute 19 seconds:
что ещё будет в тиньке (с кем, например придется делить таймер или прерывания)
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Сообщения: 55
- Зарегистрирован: Вс май 03, 2015 15:05:58
Ставьте кнопку на переключение и rs триггер. По фронту прерывания запускайте таймер и конфигурируйте прерывание на срез. По срезу тормозите таймер и забирайте значение сколько он насчитал, а так же снова конфигурируйте прерывание по фронту. И все по кругу. Подробности о схеме google: антидребезг на триггере.
переменная тау и тт
я бы завел таймер,по прерыванию опрашивал кнопку и если она разомкнута то тау=0,если замкнута то тау=тау+1 и тт=тау
таким образом в переменной тт постоянно будет храниться время нажатия кнопки,в основной программе смотрим,если тау=0 то кнопка разомкнулась,в тт время нажатия,отработали,сбросили тт
я бы завел таймер,по прерыванию опрашивал кнопку и если она разомкнута то тау=0,если замкнута то тау=тау+1 и тт=тау
таким образом в переменной тт постоянно будет храниться время нажатия кнопки,в основной программе смотрим,если тау=0 то кнопка разомкнулась,в тт время нажатия,отработали,сбросили тт
- Сообщения: 6
- Зарегистрирован: Вс ноя 26, 2017 22:11:30
Сейчас больше теоретически. А началось все со светофора. три выхода должны соответственно моргать.... Кнопкой дополнительно переходить к следующему состоянию. Долгое нажатие или бездействие (не нажатие кнопки к примеру в течении часа) должно выключать светодиоды и отправлять микруху в "глубокий" сон. Следующее нажатие будит тиньку. Возможно в промежутках между переключениями отправлять в "легкий" сон.
Думал завести переменную на подобии millis() или на таймере или на Watchdog
Добавлено after 2 minutes 55 seconds:
Да по по поводу точности.
Чем придется жертвовать для увеличения точности определения длительности нажатия.
Думал завести переменную на подобии millis() или на таймере или на Watchdog
Добавлено after 2 minutes 55 seconds:
Да по по поводу точности.
Чем придется жертвовать для увеличения точности определения длительности нажатия.
- Реклама
да ничем не придётся в данном случае.
заводишь таймер, чтобы переполнялся 10-30 раз в сеаунду, от него пляшешь: опрашиваешь кнопку если нажата приращаешь счетчик кнопки и проверяешь его на длинное нажатие при длинном нажатии гасишь всё (светофор) и уходишь в ожидание отпускания (цикл внутри прерывания) при отпускании сбрасываешь флаг переполнения таймера настраиваешь внешнее прерывание (кнопка должна быть на его пине) по низкому уровню (чтоб потом смогла проснуться) и настраиваешь глубокий сон.
если кнопка не нажата - проверяешь счетчик - меньше значения дребезга - просто сбрасываешь счетчик, больше - делаешь дело по короткому нажатию (переключаешь цвет).
по внешнему прерыванию - выждал немного (делай'ем) перепроверил кнопку если ок -отключаешь его (прерывание) и переключаешь режим сна на более мелкий режим. иначе просто выход из прерывания и снова сон.
в основном цикле будет только слип.
ещё надо завести счетчик, чтобы тикал от того же таймера (16бит) сбрасывать его по короткому нажатию и по прерыванию от кнопки, а при достижении им определенного числа делать тоже, что и при длинном нажатии.
заводишь таймер, чтобы переполнялся 10-30 раз в сеаунду, от него пляшешь: опрашиваешь кнопку если нажата приращаешь счетчик кнопки и проверяешь его на длинное нажатие при длинном нажатии гасишь всё (светофор) и уходишь в ожидание отпускания (цикл внутри прерывания) при отпускании сбрасываешь флаг переполнения таймера настраиваешь внешнее прерывание (кнопка должна быть на его пине) по низкому уровню (чтоб потом смогла проснуться) и настраиваешь глубокий сон.
если кнопка не нажата - проверяешь счетчик - меньше значения дребезга - просто сбрасываешь счетчик, больше - делаешь дело по короткому нажатию (переключаешь цвет).
по внешнему прерыванию - выждал немного (делай'ем) перепроверил кнопку если ок -отключаешь его (прерывание) и переключаешь режим сна на более мелкий режим. иначе просто выход из прерывания и снова сон.
в основном цикле будет только слип.
ещё надо завести счетчик, чтобы тикал от того же таймера (16бит) сбрасывать его по короткому нажатию и по прерыванию от кнопки, а при достижении им определенного числа делать тоже, что и при длинном нажатии.
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


