键盘信息
在 keyboard.h 的第22行
#define DeviceName "ESP32keyboard" //设备名
#define Manufacturer "Yang" //设备制造商
#define DevicePower 100 //默认设备电量
#define KEYBOARD_VERSION 4 //键盘版本(0~255) ,更改版本后,之前保存的设置将被恢复为默认值
.
接收器信息
在 keyboard.h 的第30行
#define receiverSSID "lyangl" //接收器名称(不建议有中文和中文符)
#define receiverPASD "88888888" //接收器密码(大于8字节且不建议有中文和中文符)
#define receiverKey "12345678abcd" //接收器校验码(不建议有中文和中文符)
#define receiverPORT 8266 //接收器端口
IPAddress receiverHOST(192, 168, 4, 1); //接收器IP
#define wifi_connect_led_freq 700 //连接指示灯闪烁频率
此处的定义需要与接收器的定义相同。
.
初始化后的键盘设置信息
在 keyboard.h 的第37行
#define DEFAULT_KEYBOARD_MODE 1 //键盘模式 默认为1
#define DEFAULT_LIGHT_COLOR_R 2 //灯光颜色 默认为 2
#define DEFAULT_LIGHT_COLOR_G 4 //灯光颜色 默认为 4
#define DEFAULT_LIGHT_COLOR_B 7 //灯光颜色 默认为 7
#define DEFAULT_LIGHT_BRGIGHTNESS 1 //灯光亮度 默认为1
#define DEFAULT_LIGHT_MODE 2 //灯光模式 默认为2全亮
.
组合键位置自定义
从 keyboard.h 的第123行开始
#define OFF_MODE_X 1 //关机键所在行 TAB键
#define OFF_MODE_Y 0 //关机键所在列
#define USB_MODE_X 4 //USB 键所在行 Ctrl键
#define USB_MODE_Y 0 //USB 键所在列
#define BLE_MODE_X 4 //蓝牙 键所在行 Win键
#define BLE_MODE_Y 1 //蓝牙 键所在列
#define WIFI_L_MODE_X 4 //接收器 模式 键所在行 Alt键
#define WIFI_L_MODE_Y 2 //接收器 模式 键所在列
#define WIFI_N_MODE_X 3 //网络 模式 键所在行 左Shift键
#define WIFI_N_MODE_Y 0 //网络 模式 键所在列
#define WIFI_D_MODE_X 2 //开发者 模式 键所在行 CAPS键
#define WIFI_D_MODE_Y 0 //开发者 模式 键所在列
#define LIGHT_MODE_X 2 //灯光模式 键所在行 L键
#define LIGHT_MODE_Y 9 //灯光模式键所在列
#define LIGHT_ADD_X 2 //亮度 + 键所在行 :;键
#define LIGHT_ADD_Y 10 //亮度 + 键所在列
#define LIGHT_SUB_X 2 //亮度 - 键所在行 "'键
#define LIGHT_SUB_Y 11 //亮度 - 键所在列
#define LIGHT_R_ADD_X 1 //色彩 R+ 键所在行 {[键
#define LIGHT_R_ADD_Y 11 //色彩 R+ 键所在列
#define LIGHT_G_ADD_X 1 //色彩 G+ 键所在行 }]键
#define LIGHT_G_ADD_Y 12 //色彩 G+ 键所在列
#define LIGHT_B_ADD_X 1 //色彩 B+ 键所在行 |\键
#define LIGHT_B_ADD_Y 13 //色彩 B+ 键所在列
#define LIGHT_R_SUB_X 3 //色彩 R- 键所在行 <,键
#define LIGHT_R_SUB_Y 8 //色彩 R- 键所在列
#define LIGHT_G_SUB_X 3 //色彩 G- 键所在行 >.键
#define LIGHT_G_SUB_Y 9 //色彩 G- 键所在列
#define LIGHT_B_SUB_X 3 //色彩 B- 键所在行 ?/键
#define LIGHT_B_SUB_Y 10 //色彩 B- 键所在列
#define BAT_QUERY_X 4 //电量键所在行 SPACE键
#define BAT_QUERY_Y 5 //电量键所在列
更改组合键位置需要注意
* 以下按键非组合键功能,不可更改:
* 回车键[2][13] 开机
* Fn键 组合键
* 第一行的所有按键[0][] 即 ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13
.
.
.
.
亮度最大值设置
从 keyboard.h 的第184行开始
//需要注意灯光的最大工作电流 电流过大会使锂电池充电芯片发热严重或者烧毁
#define LIGHT_MODE_NUM 2 //灯光模式最大值(模式数量) (0, 1, 2) 用于灯光模式切换
#define LIGHT_BRGIGHTNESS_MAX 4 //亮度放大倍数 注意电流大小 亮度越高工作电流越大,需要考虑TP5400(5V/1A输出)和电路板的供电能力(灯珠5V供电线宽度25mil)
#define LIGHT_R_MAX 10 //R值最大值 用来限定电流大小
#define LIGHT_G_MAX 10 //G值最大值 用来限定电流大小
#define LIGHT_B_MAX 10 //B值最大值 用来限定电流大小
.
特殊按键灯光颜色
从 keyboard.h 的第224行开始
#define Special_R 30 //锁定键RGB值(0~255) R值的占比
#define Special_G 4 //锁定键RGB值(0~255) G值的占比
#define Special_B 1 //锁定键RGB值(0~255) B值的占比
.
未操作自动关机设置
从 keyboard.h 的第230行开始
#define USB_PRESS_TIME 300000 //USB模式 键盘未操作超时 单位ms 设置为 0 则关闭自动关机功能
#define BT_PRESS_TIME 300000 //BLE模式 键盘未操作超时 单位ms 设置为 0 则关闭自动关机功能
#define WIFIL_PRESS_TIME 300000 // 接收器模式 键盘未操作超时 单位ms 设置为 0 则关闭自动关机功能
.
.
.
.
新增的灯光模式放在 user_led.ino 文件中 (如果单独创建文件也需要在 ws2812.ino 内导入对应的头文件)。
关于自定义的灯光模式代码实现的注意事项。
如果要使用延时函数,则将 delay() 延时替换为 vTaskDelay(),函数名不同,效果相同。
若使用阻塞延时或者程序内含有阻塞循环 如 while(1) 或 for( ; ; ) ,将导致IIR滤波任务无法运行,电量信息停止更新。读取到的电量为阻塞前的电量。
.
建议将阻塞方式的延时替换为非阻塞方式,可参考模式3的呼吸效果实现。
void user_mode3()
{
static uint8_t a = 0; //记录亮度为增大还是减小
static uint8_t b = 0; //当前亮度大小
static uint32_t tim = millis(); //获取当前的系统时间
uint8_t RGB_[3] = {
}; //用来获取保存的颜色
if (millis() - tim >= 100) //如果当前时间与等于前一次亮度更改的时间间隔大于 100ms
{
tim = millis(); //更新前一刻时间为当前时间,供下一次运行做比较
if (get_rgb(&RGB_[0], &RGB_[1], &RGB_[2]) == 1) //获取RGB值
{
if (a == 0) //如果a为0,则逐渐变亮
{
//刷新所有LED灯
for (uint8_t i = 0; i < 5; i++)
{
for (uint8_t j = 0; j < 14; j++)
{
ws2812_set(light_num[i][j], RGB_[0] * b, RGB_[1] * b, RGB_[2] * b);
}
}
b++; //增大亮度
if (b > 10) //当亮度达到最大值 10 时,将a置1,将转到亮度减小的代码
{
a = 1;
}
}
else //否则逐渐变暗
{
for (uint8_t i = 0; i < 5; i++)
{
for (uint8_t j = 0; j < 14; j++)
{
ws2812_set(light_num[i][j], RGB_[0] * b, RGB_[1] * b, RGB_[2] * b);
}
}
b--;
if (b <= 0) //当亮度达到最小值 0 时,将a置0,将转到亮度增大的代码
{
a = 0;
}
}
}
}
}
.
.
.
.
ws2812.h 文件第22行,开启灯光控制任务,并初始化灯光控制所需要的队列。
uint8_t light_task_begin();
ws2812.h 文件第23行,关闭灯光控制任务并释放灯光控制所占用的资源。
void light_task_end();
ws2812.h 文件第24行,初始化WS2812引脚和 RMT ,已在控制任务最开始部分被调用。
uint8_t ws2812_begin(uint8_t Pin, uint8_t num);
ws2812.h 文件第25行,设置对应灯珠序号的 RGB 值。
void ws2812_set(uint8_t n, uint8_t R, uint8_t G, uint8_t B);
ws2812.h 文件第26行,向WS2812灯珠写入数据。
void ws2812_show();
ws2812.h 文件第27行,熄灭所有特殊功能按键(大写锁定键,Fn键,问号键,0~9)。
uint8_t clean_led();
ws2812.h 文件第28行,设置特殊功能按键灯光,填入值为,(所在队列位置,灯光位置)。
例如,点亮 Fn 键的灯光,则第一个参数是 Fn_num(在keyboard.h 的第194行),
第二个参数是 Fn_led,即set_led(Fn_num,Fn_led);
。若要关闭 Fn 键的灯光,将 Fn_led改为 ERROR_CODE,即set_led(Fn_num,ERROR_CODE);
。
点亮数字键 3,set_led(num_3,num_3_led);
熄灭数字键3,set_led(num_3,ERROR_CODE);
关于传入参数的定义在keyboard.h 的第191~220行
uint8_t set_led(uint8_t led_, uint8_t num_);
ws2812.h 文件第29行,获取 led_ 特殊功能按键灯光点亮驻状态,返回值为0或1。
如,获取 Caps 键灯光点亮状态:get_led(Caps_led);
。
获取问号键灯光点亮状态:get_led(Inquiry_led);
。
uint8_t get_led(uint8_t led_);
ws2812.h 文件第30行,设置灯光RGB的值。
uint8_t set_rgb(uint8_t r, uint8_t g, uint8_t b);
ws2812.h 文件第31行,获取灯光RGB的值。
uint8_t get_rgb(uint8_t *R, uint8_t *G, uint8_t *B);
ws2812.h 文件第32行,设置灯光亮度,不能超过预定义中的最大值(keyboard.h 185行)。
uint8_t set_brgightness(uint8_t l);
ws2812.h 文件第33行,获取灯光亮度。
uint8_t get_brgightness();
ws2812.h 文件第34行,设置当前灯光模式,不能超过预定义中的最大值(keyboard.h 184行)。
uint8_t set_light_mode(uint8_t m);
ws2812.h 文件第35行,获取当前灯光模式。
uint8_t get_light_mode();
注意,程序中直接调用以上接口并不会保存设置,如果要保存设置,参考 scan.ino 中 474~484行之间的代码实现。