代码拉取完成,页面将自动刷新
CH9239 arduino 库, 便于快速使用
这个库的更改日志可以在 CHANGELOG 中找到。
press()
释放 release()
点击 click()
打印字符串 printstr
等功能press()
释放 release()
点击 click()
滚动滑轮scrioll()
移动光标位置moveby()
移动绝对光标位置 moveto
按住拖拽start_drag()
stop_drag()
等功能
注意:
press()
release()
click()
函数中, 不要添加多余 6 个
普通键键值(除 Win Ctrl Shift Alt 和多媒体键之外的键值)press()
release()
click()
中混用键盘鼠标两种键值.即 // 错误
ch9329.press(KEY_SHIFT,MOUSE_BUTTON_MIDDLE,END);
// 正确
ch9329.press(MOUSE_BUTTON_MIDDLE,END);
ch9329.press(KEY_SHIFT,END);
press()
release()
click()
三个函数中, 参数列表的最后一次值一定要加上 END, 做为结束判断标志, 使用不定参数模板可以去掉这个 END, 但是代码会比复杂, 笔者水平不够, 暂时没有采用此方法实现#include "Ch9329.h"
Ch9329 ch9329;
setup()
中配置芯片ch9329.set_usb_manufacturer_string("WCH"); // 设置厂家名称
delay(200);
ch9329.set_usb_product_string("MyCH9329"); // 设置产品名称
delay(200);
ch9329.set_usb_serial_string("20221020"); // 设置产品序列号
delay(200);
ch9329.set_configure(0x1234, 0x5678); // 设置 PID 厂家代码和 VID 产品代码
ch9329 芯片在 USB 枚举完成,或者是键盘指示灯改变后,都会发一条信息到 MCU, 此处用 usb_connect_cb()
函数接收
ch9329.attach_usb_connect(usb_connect_cb); // 注册 USB 链接回调
ch9329.attach_get_results(get_result_cb); // 注册 异常应答包触发回调
void usb_connect_cb()
{
Serial.println("success to connect PC");
Serial.printf("num_lock[%d] caps_lock[%d] scroll_lock[%d] \n",
ch9329.num_lock_light, ch9329.caps_lock_light, ch9329.scroll_lock_light);
}
// 异常应答包触发回调
void get_result_cb(RESULTS res)
{
Serial.printf("CMD: 0x%02x Results: 0x%02x \n",
res.cmd, res.error);
}
/*cmd指令码*/
#define CMD_GET_INFO 0x01 // 获取芯片获取版本号、 USB 枚举状态、键盘大小写指示灯状态等信息
#define CMD_SEND_KB_GENERAL_DATA 0x02 // 发送 USB 键盘普通数据
#define CMD_SEND_KB_MEDIA_DATA 0x03 // 发送 USB 键盘多媒体数据
#define CMD_SEND_MS_ABS_DATA 0x04 // 发送 USB 绝对鼠标数据
#define CMD_SEND_MS_REL_DATA 0x05 // 发送 USB 相对鼠标数据
#define CMD_SEND_MY_HID_DATA 0x06 // 发送 USB 自定义数据
#define CMD_READ_MY_HID_DATA 0x87 // 读取 USB 自定义数据
#define CMD_GET_PARA_CFG 0x08 // 获取芯片参数配置
#define CMD_SET_PARA_CFG 0x09 // 设置芯片参数配置
#define CMD_GET_USB_STRING 0x0A // 获取字符串描述符配置
#define CMD_SET_USB_STRING 0x0B // 设置字符串描述符配置
#define CMD_SET_DEFAULT_CFG 0x0C // 恢复出厂默认配置
#define CMD_RESET 0x0F // 复位芯片
如果通讯发生异常, 芯片会发一条异常码给 MCU, 对应的关系如下
异常码代号 | HEX 值 | 含义 |
---|---|---|
DEF_CMD_SUCCESS |
0x00 |
命令执行成功. |
DEF_CMD_ERR_TIMEOUT |
0xe1 |
串口接收一个字节超时. |
DEF_CMD_ERR_HEAD |
0xe2 |
串口接收包头字节出错. |
DEF_CMD_ERR_CMD |
0xe3 |
串口接收命令码错误. |
DEF_CMD_ERR_SUM |
0xe4 |
累加和检验值不匹配. |
DEF_CMD_ERR_PARA |
0xe5 |
参数错误. |
DEF_CMD_ERR_OPERATE |
0xe6 |
帧正常,执行失败. |
在 vscode + PlatformIO + arduino 中, 只需要在 platformIO.ini 文件中加入. 运行正常后建议关闭
build_flags = -DCORE_DEBUG_LEVEL=4
#include <keymouser.h>
#include "OneButton.h"
Keymouser ch9329;
OneButton btn1(19, true);
void sayHello()
{
ch9329.click(KEY_WIN, END);
delay(200);
ch9329.printstr("text");
delay(200);
ch9329.click(KEY_ENTER, END);
delay(2000);
ch9329.printstr("Hello world!");
}
void btn1_click_cb(void)
{
ch9329.click(KEY_MEDIA_MUTE);
}
void btn1_press_start_cb(void) // 按键按下的时候 将一直按着 SHIFT 和鼠标 MIDDLE 键, 并且向右移动光标2px
{
ch9329.press(KEY_SHIFT, END);
ch9329.start_drag(MOUSE_BUTTON_MIDDLE, 2, 0);
}
void btn1_press_cb(void)
{
ch9329.press(KEY_SHIFT, END);
ch9329.start_drag(MOUSE_BUTTON_MIDDLE, 2, 0);
}
void btn1_press_stop_cb(void) // 按键释放的时候, 释放 SHIFT 和鼠标 MIDDDLE 键
{
ch9329.release(KEY_SHIFT, END);
ch9329.stop_drag(MOUSE_BUTTON_MIDDLE);
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。