Однажды, во время утреннего полистывания Twitter, мое внимание привлек проект господина @arturo182 (a.k.a Artur Pacholec). Проект представляет собой DIY смартфон на базе экранчика ILI9341 и qwerty-клавиатуры с подсветкой от BlackBerry Q10. Особенно меня впечатлила идея использования клавиатуры от смартфона. Было решено незамедлительно обзавестись такой клавиатурой и научиться с ней работать.
Вот как она выглядит:
Клавиатуру можно приобрести на eBay менее чем за 3$. Подключение к ней осуществляется через маленький коннектор с замысловатым названием BM14B(0.8)-24DS-0.4V(53). Быстрее и дешевле всего оказалось купить такие коннекторы в Чип-и-Дипе . Нам также понадобится переходник с этого разъема на обычные пины с шагом 2.54 мм. К счастью, @arturo182 заботливо выложил такой переходник на GitHub’е . Платы были заказаны на OSH Park.
Припаять коннектор не особо сложно, главное иметь под рукой хороший флюс и лупу с сильным увеличением. Лично я сначала залудил пады на плате, припаял коннектор за два пина, расположенных по диагонали, а затем, придавливая его к плате пинцетом, припаял все остальные пины. Если визуально плата в порядке, отмываем в УЗ-ванне (при таком расстоянии между пинами зубная щетка плохо справляется) и перепроверяем мультиметром.
Используя получившийся переходник, я подключил клавиатуру к отладочной плате LimeSTM32 :
Для питания клавиатуре нужно 3.3 В. Подсветка не такая яркая, чтобы ее было хорошо видно на фото. Однако в темноте свою функцию она выполняет прекрасно. Кнопки соединены по матричной схеме , 7 строк на 5 столбцов. Подавая высокое напряжение на один столбец и считывая напряжение со строк, мы можем определить, какая кнопка сейчас нажата.
Пример кода, использующего таймер и прерывания :
HAL_GPIO_WritePin ( Col1_GPIO_Port , Col1_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( Col2_GPIO_Port , Col2_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( Col3_GPIO_Port , Col3_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( Col4_GPIO_Port , Col4_Pin , GPIO_PIN_RESET ) ;
HAL_GPIO_WritePin ( Col5_GPIO_Port , Col5_Pin , GPIO_PIN_RESET ) ;
}
char * buttons [ ] [ 5 ] = {
/* ROW 1 */ { «q» , «e» , «r» , «u» , «o» } ,
/* ROW 2 */ { «w» , «s» , «g» , «h» , «l» } ,
/* ROW 3 */ { «SYM» , «d» , «t» , «y» , «i» } ,
/* ROW 4 */ { «a» , «p» , «RSHIFT» , «ENTER» , «DEL» } ,
/* ROW 5 */ { «ALT» , «x» , «v» , «b» , «$» } ,
/* ROW 6 */ { » » , «z» , «c» , «n» , «m» } ,
/* ROW 7 */ { «MIC» , «LSHIFT» , «f» , «j» , «k» } ,
} ;
char * buttons_alt [ ] [ 5 ] = {
/* ROW 1 */ { «#» , «2» , «3» , «_» , «+» } ,
/* ROW 2 */ { «1» , «4» , «/» , «:» , » » «» }
/* ROW 3 */ { NULL «»5″» «»(«»