最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

当前位置: 主页 > 电脑DIY > 电脑DIY >

也跟风!做一把可编程机械小键盘

时间:2017-05-16 12:38来源:数码之家 作者:江小g 点击:
自从看了http://bbs.mydigit.cn/read.php?tid=1399122这个帖子后,心里就痒痒,想自己做一把GH60。奈何GH60价格对我来说还是太高,所以就放弃了。但是这个草还是长在我心里挥之不去,于是我决定自己做一把小键盘,这样既能满足我的DIY心,又能为我的扁扁的钱
自从看了http://bbs.mydigit.cn/read.php?tid=1399122这个帖子后,心里就痒痒,想自己做一把GH60。奈何GH60价格对我来说还是太高,所以就放弃了。
但是这个草还是长在我心里挥之不去,于是我决定自己做一把小键盘,这样既能满足我的DIY心,又能为我的扁扁的钱包出一份力。

Espode 1:硬件采购和介绍

经过放狗搜索,我查找到可以用Arduino Pro Micro来做键盘主控,并且有相应的固件(TMK)支持。
这就是Arduino Pro Micro:
也跟风!做一把可编程机械小键盘

从淘宝淘来的二手Cherry黑轴机械键盘:
也跟风!做一把可编程机械小键盘

让我们把它打开:
也跟风!做一把可编程机械小键盘

打开后是这个样子的:
[attachment=6730532]

翻开来看看:
也跟风!做一把可编程机械小键盘

其实我们是不要那个显示部分的,只要主键位就好:
也跟风!做一把可编程机械小键盘

让我们来看看主控室什么:
也跟风!做一把可编程机械小键盘

斜着看看:
也跟风!做一把可编程机械小键盘

好,居然是74HC595也跟风!做一把可编程机械小键盘

楼下继续


Espode 2 硬件改造

仔细观察键盘反面的线路,发现他是全部键共用一个脚的:
也跟风!做一把可编程机械小键盘

well,我们要做一个键盘阵列,便于节省IO口。
首先 把纵向的铜箔割开:
也跟风!做一把可编程机械小键盘

然后把他们连起来:
也跟风!做一把可编程机械小键盘

这里我犯了一个错误,我应该把74HC595拆下来的。
于是我就改线路了:
也跟风!做一把可编程机械小键盘

一个键盘阵列就做好了。

我们来看看Arduino的IO定义(这张图来自网络)
也跟风!做一把可编程机械小键盘

我的设想是,用10/16/15/14作为阵列的纵向输入口,用5/6/7/8/9作为阵列的横向输入口。
于是我就这么连接了:
也跟风!做一把可编程机械小键盘

连接好后,硬件改造完毕。
楼下继续。

Espode 3 软件改造
如果你不想知道怎么修改固件,请只看黑体字!
我们在这里使用开源的TMK,Github:https://github.com/tmk/tmk_keyboard
同时说明一下,TMK也被用于GH60。

你还需要准备的东西有:
TMK修改版:https://github.com/kairyu/tmk_keyboard_custom
TKG,一个键位生成器:https://github.com/kairyu/tkg
TKG_TOOLKIT,用于刷写固件及EEPROM:https://github.com/kairyu/tkg-toolkit

我们这里以GHPad为蓝本来修改固件:
首先进入TMK的修改版文件夹下的keyboard/ghpad/,
打开matrix.c,修改阵列配置:

找到下面这几行:
复制代码
  1. /* Column pin configuration
  2. *  col: 0   1   2   3
  3. *  pin: F0  F1  E6  C7
  4. */
  5. static void  init_cols(void)
  6. {
  7.     // Input with pull-up(DDR:0, PORT:1)
  8.     DDRF  &= ~(1<<PF1 | 1<<PF0);
  9.     PORTF |=  (1<<PF1 | 1<<PF0);
  10.     DDRE  &= ~(1<<PE6);
  11.     PORTE |=  (1<<PE6);
  12.     DDRC  &= ~(1<<PC7);
  13.     PORTC |=  (1<<PC7);
  14. }
  15.  
  16. /* Column pin configuration
  17. *  col: 0   1   2   3
  18. *  pin: F0  F1  E6  C7
  19. */
  20. static matrix_row_t read_cols(void)
  21. {
  22.     return (PINF&(1<<PF0) ? 0 : (1<<0)) |
  23.            (PINF&(1<<PF1) ? 0 : (1<<1)) |
  24.            (PINE&(1<<PE6) ? 0 : (1<<2)) |
  25.            (PINC&(1<<PC7) ? 0 : (1<<3));
  26. }
  27.  
  28. /* Row pin configuration
  29. * row: 0   1   2   3   4   5
  30. * pin: D0  D1  D2  D3  D4  D5
  31. */
  32. static void unselect_rows(void)
  33. {
  34.     // Hi-Z(DDR:0, PORT:0) to unselect
  35.     DDRD  &= ~0b00111111;
  36.     PORTD &= ~0b00111111;
  37. }
  38.  
  39. /* Row pin configuration
  40. * row: 0   1   2   3   4   5
  41. * pin: D0  D1  D2  D3  D4  D5
  42. */
  43. static void select_row(uint8_t row)
  44. {
  45.     // Output low(DDR:1, PORT:0) to select
  46.     switch (row) {
  47.         case 0:
  48.             DDRD  |= (1<<0);
  49.             PORTD &= ~(1<<0);
  50.             break;
  51.         case 1:
  52.             DDRD  |= (1<<1);
  53.             PORTD &= ~(1<<1);
  54.             break;
  55.         case 2:
  56.             DDRD  |= (1<<2);
  57.             PORTD &= ~(1<<2); (责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容