Waffle - 一个带旋钮的 Macro 4x4 RGB Pad

Posted

一、什么东西都要得有一个优(neng)雅(chi)的名字

你说下面两个东西像不像?(华夫饼吃完了。。。没法拍照。。。饿) 你说这个名字是不是很好吃,额,不,优雅!

二、基本构思

使用40键盘,很多人都会配一个数字键盘(大家都清楚,这是一个买键盘的好理由,对吧)。迫于市面上都没有喜(mai)欢(de)的(qi),恰逢淘宝也有一个 4x4 的铝合金外壳在售(为什么没买配套PCB?房子小,放不下垃圾),所以直接自己画一个 4x4 的 PCB。 一般这么小的键盘,输入数字只是很小的一个需求,更多的是一个装饰,但就只是一个键帽架子吗?不,因为并没有钱买那些比整个键盘还贵的个性键帽。那究竟需要什么一个Pad呢?我认为目前需要有的特性如下:

  • RGB;既能当键帽架,又能在使用时提供一定的指示和装逼功能。

  • 旋钮;快速调整音量,方便使用。(还有更多功能,音量是基本需求)

  • 宏; 这个应该是这个键盘的主要特色,目前市面的 RGB Pad 应该都没有这个杀手特性。(绝对不要用键盘宏输入密码,输账号、网址和代码段都是极好的)

  • 喇叭;在线配置工具无法使用更强的喇叭特性,要使用需要自己编译。这个喇叭普通用法时,仅用于指示刷机时的 DFU 模式(哒哒响)。

  • 固件开源;来源于开源社区,就要回馈,不是吗?

三、用法

http://kbfirmware.com/ ,upload 提供的 waffle16.json 然后在 KEYMAP 项进行按键设置,旋钮的设置是 keymap 左侧的两个按键,直接设置就行,如何实现在一下段讲解教学。需要使用键盘宏的,在 MACROS 项进行在线录制(对,不需要写代码),调用的键在 KEYMAP 里按键选 FN > M(),然后设置对应的宏编号即可。 其他地方不需要改动,已经使用巧妙的代码搞定了。 键盘交互: 在 0 层会维持 RGB 的灯效,其他层会根据层号和按键设置进行彩色提示。如果非0层的键值设置为 TRNS ,所在键亮白色。如果设置为 NO ,灭灯。其他键,每层颜色都不同,便于区分当期层。个人建议如果当前层不需要的键,设置为 NO,便于识别。每层不要设满,毕竟有15层,什么都够了吧。。。 为什么这次没有旋钮灯效?因为加进去导致代码行数增多,入门的朋友可能会看到脑袋疼。如果有能力的,可以参考我的另外一个键盘的代码:Tetris

四、Magic讲解

在 Tetris 中,旋钮的键值配置需要在代码中修改,部分小伙伴改起来头大。所以我就用个通用点的方法吧。在键盘矩阵中放入物理矩阵中不存在的按键,然后通过函数引用对应的键值,这样在配置的时候就更简单了,而且通过引用提取的方法,可以很快地使用上 eepmap,也就是 TKG 版本键盘也能很容易地加上旋钮特性。(TKG,我不会做的,留给各位大神的,代码我送上了) keycode = keymap_key_to_keycode(层数, (keypos_t){ .row = 列号, .col =行号 };

五、Next ?

Honey Waffle! 实现最后一个有线键盘的目标。目前 BLE 在低版本操作系统和部分内置蓝牙适配器上使用体验并不完美,在响应和稳定性上,罗技优联已经处于不败之地,所有通过最后一个有线设备完成转换就是目前较好的方案,同时有线供电,RGB想多亮就多亮,亮多久都行。 基本框架:USB后接一个 usb hub 1 ,然后接入一个Waffle和一个U2U,在U2U后再接一个usb hub 2用于满足使用优联分体的朋友。 为什么要使用 usb hub 1,并不是目前 u2u 固件不能同时支持物理矩阵和虚拟矩阵,只是这样解决起来简单,Waffle能独立配置,u2u也不会应用更多的配置难度,同时能降低 u2u 的负载,提供更高的转换响应性能。(可能会使用 stm32 进行 u2u ,这样就算处理鼠标也是洒洒水了)

-EOF-