6、键盘自定义

键盘信息自定义

键盘信息
在 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行之间的代码实现。

你可能感兴趣的:(ESP32键盘(64键),arduino)