当然可以!以下是逐行注释的代码解释:

#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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录