Дребезг резистивных кнопок
- Войдите на сайт для отправки комментариев
Чт, 08/05/2014 - 11:39
Всем привет!
Кто может подсказать как убрать дребезг резистивных кнопок:
Плата Arduino Leonardo+Джойстик Sony RM-X4S. Ардуинка определяется как клавиатура, отсылает горячие клавиши в Centrafuse.
Скетч нашел в инете, подправил значения под свой джойстик. Команды принимаются отлично, но дребезг очень мешает, нажимаю паузу - в плеере воспроизведение 3-4 раза успевает стартовать и остановиться...
int analogPin=0; int data; void setup() { Keyboard.begin(); Serial.begin(115200); } void loop() { data=analogRead(analogPin); //читаем значение нажатой кнопки Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта if (data>=393 && data<=413) Keyboard.write('0'); //pause if (data>=886 && data<=906) Keyboard.write('1'); //vol+ if (data>=843 && data<=863) Keyboard.write('2'); //vol- if (data>=467 && data<=487) Keyboard.write('3'); //>> if (data>=444 && data<=464) Keyboard.write('4'); //<< if (data>=791 && data<=811) Keyboard.write('6'); //next track if (data>=730 && data<=750) Keyboard.write('5'); //prev track if (data>=948 && data<=968) Keyboard.write('7'); //menu media delay(100); }
потому, что не нужно идиотничать, экономя пины и использовать джойстик не по назначению.
Принимай несколько значений, бери средне-арифметичесское. Вобщем софтово обрабатывай.
Если лениво, ставь маленький конденсатор на входе, будет сглаживать. На первый момент сойдет.
потому, что не нужно идиотничать, экономя пины и использовать джойстик не по назначению.
На завод напишите, на ХУНдай ! Это там инженеры такие глупые, нашим ни чета :)
На завод напишите, на ХУНдай ! Это там инженеры такие глупые, нашим ни чета :)
ок - напишу прислать топикстартеру джойстик от хюндай.
*запретить идиотов.
Почитайте прикрепленную ветку про кнопки. Разберитесь как борются с дребезгом на обычных кнопках. Потом, по аналогии, то же самое сделайте со своми кнопками. Разница только в том, что там чтение кнопки делается примерно так
а у вас так
Все. Дальше вся логика "антидребезга" должна работать именно с "состоянием кнопки", и ей пофиг как было прочитано это состояние.
Вообщем все как в анегдоте:
Мы в данном случае выступем "математиками".
1. Вначале учимся УВЕРЕННО работать с обычными кнопками. Понимая "что происходит", а не "скопировали кусок скетча - вроде работает".
2. Отделяем "чтение кнопки" (работа с физическим оборудованием) от "обработки и принятия решений". Что позволяет нам свести задачу к предыдущей. Воспользоватся теми же самыми методами.
потому, что не нужно идиотничать, экономя пины и использовать джойстик не по назначению.
На завод напишите, на ХУНдай ! Это там инженеры такие глупые, нашим ни чета :)
Схема моего джойстика.
по моему - нужно добить количество кнопок до 1024, что бы не разбазаривать ресурсы контроллера.
*ну, это же идиотизм потребителя, поддерживаемый жлобством производителя - делать клавы из аналоговых джойстиков.
*ну, это же идиотизм потребителя, поддерживаемый жлобством производителя - делать клавы из аналоговых джойстиков.
И этот же человек возмущался что "ему нотации читают". У самого-то с апломбом тоже все "будь здоров".
Если у человека уже есть джойстик. Почему его не заюзать? Готовый корпус, готовая механика... Или вы думаете что многие могут изготовить клаву в домашних условиях лучшего качества? Я имею ввиду механику всю.
Или нужно раздолбать покупной джойстик, что-бы он больше ни с кем небыл совместим, перепаять одинадцать кнопок, вывести жмут проводов, потом либо занять фигову тучу ног (возможно еще мегу прикупить), либо мотнутся кабанчиком на поиски сдвиг-регистра (и научится с ним работать)....
да, нечего сказать офигенно оптимальный путь.
Или вы хотели предложить купить "другой джойстик"/другую клаву? Или нужно всобачить туда тиньку и работать с ней по I2C?
Что вы предлагаете делать-то топикстартеру? Давайте не будем идиотничать, послучаем ваше мудрое предложение.
Глядишь просветимся и поймем почему ТИПИЧНОЕ решение клавы на резистивных делителях (которое, как любое решение имеет свои плюсы и недостатки) является идиотским и никогда не должно применятся.
сделайте защиту от дребезга, как это делается для обычных кнопок.
т.е. 1) сохраняете значение порта.
2) если значение изменилось, ждем 50 mS, читаем еще раз
3) что прочитали после задержки, то правда :) сохраняем в data
дальше ваш код.
у меня такой код на обработку резиствных кнопок работает. задержка в 50 mS вполне достаточно.
http://forum.aves-peugeot.ru/viewtopic.php?f=21&t=13494&start=120
Я повторял схему с этого форума , подавление дребезга триггером успешно работает. Сначала думал на тиньке построить, но птом решил, что есть готовая плата, кучка копеечных деталей, работает при отсутствии соплей сразу, зачем огород городить.
Как то мне надо было применить резистивную клаву ( пока ехала мембранная ). Для удобства я повесил на самую дальнюю от земли кнопку компаратор, ноль с которого повесил на прерывание, настроенное по срезу импульса, которое выполняло по сути роль триггера, срабатывая по первому срезу из дребезговой пачки. Внутри прерывания делал небольшую задержку ( порядра 5 мкС , пустым циклом) . Наличие прерывания и задержки не избавило от необходимости повесить ёмкость ( порядка 500 нФ).
Тем не менее, после ряда головняков, перестал применять резистивные клавы. Перешел на мембранные 4х4 или 4х1 , в зависимости от тз, напрямую, или по i2c, в зависимости от количества оставшихся ног.
Спасибо!