Arduino 作为键盘 HID:程序在键盘/编程模式下运行方式不同

Posted

技术标签:

【中文标题】Arduino 作为键盘 HID:程序在键盘/编程模式下运行方式不同【英文标题】:Arduino as Keyboard HID: Program runs differently in Keyboard/Programming mode 【发布时间】:2022-01-10 20:34:49 【问题描述】:

我正在尝试使用我的 Arduino Uno 制作键盘 HID。我的 Arduino 1)在建立与输入的连接时点亮红色 LED(模拟按键_并在建立连接时将其关闭;2)在触发输入时点亮蓝色 LED,通过串行发送一次模拟键盘信号,并在输入未触发时关闭 LED。我的程序似乎可以工作,在启动时打开红色 LED 约 0.5 秒,点亮蓝色 LED 并在触发外部输入时按预期发送信号。

但是,在我缩短 Arduino 以清除原始十六进制并刷新所需的十六进制文件以帮助我的 PC 使用 Freematics Builder 将 Arduino 识别为 HID 键盘后,程序不再按预期工作。启动时红色 LED 不再亮;蓝色 LED 总是微弱地亮起并且不响应外部输入触发。我尝试了多个 hex 文件版本(one version、another version),但它们的行为都相同。

我是否使用了错误版本的 hex 文件?我做错什么了吗?

附:简化代码:

// #includes

Adafruit_MPR121 cap = Adafruit_MPR121(); // input

/////////////////////////////////////////////////

#define KEY_1 0x59
#define KEY_2 0x5a
#define KEY_3 0x5b
#define KEY_4 0x5c
#define KEY_5 0x5d
// ... Keycodes

void press_key(int key) 
  uint8_t buf[8] = 0;
  buf[2] = key;
  Serial.write(buf, 8);
  buf[2] = 0;
  Serial.write(buf, 8);


void setup() 
  pinMode(2, OUTPUT); // blue LED
  pinMode(3, OUTPUT); // red LED
  
  Serial.begin(9600);
  while (!Serial) delay(10); 

  digitalWrite(3, HIGH);
  if (!cap.begin(0x5A))  // Wait until established connection
    while (1);
  
  digitalWrite(3, LOW); // turn off red LED

  delay(1000);


void loop() 
  if (input_is_valid()) 
    if (input_triggered()) 
      press_key(corresponding_key);
      digitalWrite(2, HIGH); // light blue LED
     else  // input_untriggered
      digitalWrite(2, LOW); // turn off blue LED
    
  
  
  delay(100);

【问题讨论】:

我不确定 freematics 与制作 ahid 键盘有什么关系? @AlanBirtles Freematics 是用于将 hex 文件刷入 Arduino 的软件。 为什么选择 UNO?有带有原生 USB 的 atmega32u4(leonardo、micro、pro micro、..)的变体,它可以工作...... @KIIV 我学校的实验室只有 uno... 我想做一个 leonardo,它有很好的内置键盘模拟... 【参考方案1】:

我使用 Atmel Flip 进行闪烁,效果很好。我使用的十六进制文件版本在this tutorial 中。在短接 Arduino 之后和闪烁之前,在您的设备管理器中检查 Arduino。如果在其他设备下显示类似 atmega16u2,请按照上述博客中的额外步骤从 Atmel 安装驱动程序。完成这些步骤后,您可能需要尝试几次才能成功加载十六进制。

【讨论】:

以上是关于Arduino 作为键盘 HID:程序在键盘/编程模式下运行方式不同的主要内容,如果未能解决你的问题,请参考以下文章

手把手教你做一款HID键盘

USB小白学习之路HID键盘程序

求救!!usb hid设备(模拟键盘)遇到的问题

Proteus仿真Arduino UNO +74C922键盘解码驱动4X4矩阵键盘

用于辅助键盘的 OSX HID 过滤器?

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块