Приобрел китайскую 4*3 клавиатуру. Подключил ее как в примерах инета нарисовано - напрямую к пинам 2-8. Запускаю скетч на основе модуля Keypad.h. Она, вроде, и работает, но как хочет.... то пропускает нажатия, то нет... иногда может вообще не определять нажатия - хоть с какой силой дави на нее((( Возможно ее как-то четко отрегулировать?
все это из за дребезжание кнопок. Нужно сделать примерно так: если нажата кнопка 1{ задержка 10 Если нажата кнопка 1 { действие кнопки }}
Нет, немного не то... Если бы дело было в дребезге, то они бы просто "пачками" выводились, а тут... Просто на некоторые нажимаешь - ничего не выводится, понажимаешь, может раз проскочит, а может и нет... а некоторые кнопки могут нормально выводится, а в след раз - нет... Странно( И чаще - верхняя и нижняя строка показываются все символы, а 2 средние - нет..
Вот так примерно нажимается любая кнопка. Ардуина думает что кнопка нажимается более 1 раза от этого то работает/то не работает, в общем как повезет. А резисторы подключал? Возможно далее в коде есть защита от вывода "пачками" поэтому пачек и нет))
Вообще-то в библиотеке keypad уже встроен антидребезг. Возможно, проблема в существенной задержке между проверками состояния клавиатуры, когда программа выполняет какие-то другие действия. Насколько я понял, библиотека keypad не использует таймер или прерывания, а потому может пропустить нажатие кнопки в такой ситуации. Если оно так, то возможны варианты: 1. Дробление длинных операций с целью вставки большего числа вызовов сканирования клавиатуры. 2. Повесить таймер, чтобы достаточно часто опрашивал клавиатуру и сохранял события нажатия кнопок в буфере, который затем и проверять (но тогда в сложившейся ситуации могут быть задержки между нажатием кнопки и реакцией на нее). 3. Если нет возможности как-то увеличить частоту сканирования клавиатуры (например, нет желания или возможности переделать чужую библиотеку для работы с какой-нибудь железкой, а таймеры уже заняты другими библиотеками), то можно сделать "контроллер клавиатуры" - отдельный МК, программа в котором занята только опросом клавиатуры. Можно добавить к обработке клавиатуры еще какие-нибудь функции, не создающие длительных задержек. Обмен между этим "контроллером клавиатуры" и основной ардуиной можно реализовать по UART (там есть буферизация). Естественно, в простых проектах это бессмысленное расточительство, и лучше решить вопрос при помощи вариантов 1 и 2. Также может просто быть где-то неустойчивый контакт в подключении клавиатуры.
А ты попробуй без библиотеки. Щас с компа зайду, скину код. Отключи все остальное и попробуй чисто с клавиатурой работать.
код в этом виде не проверялся, я делал его под 4*4 клаву подключение-первые 4 пина клавы к пинам 2-5, остальные 3 к пинам 6-8(притяни их резами к земле) Код (Text): int startOut=2;//Начало пинов выхода int startIn=6;//начало пинов входа int x=3;//ширина клавы int y=4;//высота клавы char keypadchar(){ char keys[ y ][ x ]={{'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'}};//Клавиатура for (int i=startOut;i<startOut+y;i++){ pinMode(i,OUTPUT); digitalWrite(i,HIGH); for (int j=startIn;j<startIn+x;j++){ if(digitalRead(j)) { digitalWrite(i,LOW);return keys[i-startOut-1][j-startIn-2];}//возвращаем символ } digitalWrite(i,LOW); } return;//Если ничего не нажато }