Arduino USB HID 键盘模拟:逐行注释讲解
当然可以!以下是逐行注释的代码解释:
#ifndef USER_USB_RAM // 如果没有定义 USER_USB_RAM,则执行以下代码
#endif // 结束 ifndef 语句
#include "src/userUsbHidKeyboard/USBHIDKeyboard.h" // 引入 USBHIDKeyboard 库
#define BUTTON1_PIN 16 // 定义 BUTTON1_PIN 为 16 号引脚
#define BUTTON2_PIN 15 // 定义 BUTTON2_PIN 为 15 号引脚
#define BUTTON3_PIN 14 // 定义 BUTTON3_PIN 为 14 号引脚
#define LED_BUILTIN 17 // 定义 LED_BUILTIN 为 17 号引脚
bool button1PressPrev = false; // 用于存储上一个循环中 BUTTON1_PIN 引脚的状态,初始化为 false
bool button2PressPrev = false; // 用于存储上一个循环中 BUTTON2_PIN 引脚的状态,初始化为 false
bool button3PressPrev = false; // 用于存储上一个循环中 BUTTON3_PIN 引脚的状态,初始化为 false
bool ledstate = false; // 用于存储 LED_BUILTIN 引脚的状态,初始化为 false
void setup() {
USBInit(); // 初始化 USB 连接
pinMode(BUTTON1_PIN, INPUT_PULLUP); // 将 BUTTON1_PIN 引脚设置为输入引脚,并启用内部上拉电阻
pinMode(BUTTON2_PIN, INPUT_PULLUP); // 将 BUTTON2_PIN 引脚设置为输入引脚,并启用内部上拉电阻
pinMode(BUTTON3_PIN, INPUT_PULLUP); // 将 BUTTON3_PIN 引脚设置为输入引脚,并启用内部上拉电阻
pinMode(LED_BUILTIN, OUTPUT); // 将 LED_BUILTIN 引脚设置为输出引脚
digitalWrite(LED_BUILTIN, HIGH); // 将 LED_BUILTIN 引脚的电平设置为高
}
void loop() {
bool button1Press = !digitalRead(BUTTON1_PIN); // 读取 BUTTON1_PIN 引脚的状态,并将其取反赋值给 button1Press
if (button1PressPrev != button1Press) // 如果当前循环中 BUTTON1_PIN 引脚的状态与上一个循环中的状态不同
{
button1PressPrev = button1Press; // 更新上一个循环中 BUTTON1_PIN 引脚的状态为当前状态
if (button1Press) {
Keyboard_press('c'); // 如果按键按下 (button1Press 为 true),则模拟按下字符 'c' 键
}
else {
Keyboard_release('c'); // 如果按键释放 (button1Press 为 false),则模拟释放字符 'c' 键
}
}
bool button2Press = !digitalRead(BUTTON2_PIN); // 读取 BUTTON2_PIN 引脚的状态,并将其取反赋值给 button2Press
if (button2PressPrev != button2Press) // 如果当前循环中 BUTTON2_PIN 引脚的状态与上一个循环中的状态不同
{
button2PressPrev = button2Press; // 更新上一个循环中 BUTTON2_PIN 引脚的状态为当前状态
if (button2Press) {
Keyboard_press(KEY_LEFT_CTRL); // 如果按键按下 (button2Press 为 true),则模拟按下左 Ctrl 键
}
else {
Keyboard_release(KEY_LEFT_CTRL); // 如果按键释放 (button2Press 为 false),则模拟释放左 Ctrl 键
}
}
bool button3Press = !digitalRead(BUTTON3_PIN); // 读取 BUTTON3_PIN 引脚的状态,并将其取反赋值给 button3Press
if (button3PressPrev != button3Press) // 如果当前循环中 BUTTON3_PIN 引脚的状态与上一个循环中的状态不同
{
button3PressPrev = button3Press; // 更新上一个循环中 BUTTON3_PIN 引脚的状态为当前状态
if (button3Press) {
Keyboard_press('v'); // 如果按键按下 (button3Press 为 true),则模拟按下字符 'v' 键
}
else {
Keyboard_release('v'); // 如果按键释放 (button3Press 为 false),则模拟释放字符 'v' 键
}
}
if (digitalRead(BUTTON2_PIN) == false && digitalRead(BUTTON3_PIN) == false && digitalRead(BUTTON1_PIN) == false) // 如果同时按下了三个按键
{
delay(350); // 延时 350 毫秒
if (digitalRead(BUTTON2_PIN) == false && digitalRead(BUTTON3_PIN) == false && digitalRead(BUTTON1_PIN) == false) // 再次判断是否同时按下了三个按键
{
if (ledstate == false) // 如果 ledstate 为 false
{
ledstate = true; // 将 ledstate 设置为 true
}
else
{
ledstate = false; // 否则将 ledstate 设置为 false
}
}
}
if (ledstate == false) {
digitalWrite(LED_BUILTIN,HIGH); // 如果 ledstate 为 false,则将 LED_BUILTIN 引脚设置为高电平
}
else {
digitalWrite(LED_BUILTIN,LOW); // 如果 ledstate 为 true,则将 LED_BUILTIN 引脚设置为低电平
}
delay(50); // 延时 50 毫秒
}
希望这样能更清楚地帮助你理解代码的每一行。如果还有其他问题,请随时提问!
原文地址: https://www.cveoy.top/t/topic/PZs 著作权归作者所有。请勿转载和采集!