Arduino调用Keyboard.print输出双引号变成@的问题如何解决
问题原因
该问题由Arduino Keyboard库的键盘布局默认设置和运行端系统的键盘布局不匹配导致:
Arduino官方Keyboard库默认使用美式英文(US QWERTY)键盘布局发送按键键码,若你运行PowerShell的系统采用的是其他键盘布局(如英式键盘、区域定制键盘布局等),US布局下对应双引号"的键码,在你的系统布局中正好对应@字符,就会出现双引号被替换为@的问题。
解决方法
方案1:调整代码适配现有布局(推荐,无需修改系统配置)
不要在Keyboard.print的字符串中直接使用转义双引号\",改为手动模拟双引号对应的按键组合即可。以大多数中文区常用的键盘布局为例,双引号对应「左Shift+单引号」的按键组合,将原出错的代码段替换为以下内容即可:
// 替换原出错的Keyboard.print行 Keyboard.print("echo "); // 输出第一个双引号 Keyboard.press(KEY_LEFT_SHIFT); Keyboard.print('\''); Keyboard.releaseAll(); // 输出证书头内容 Keyboard.print("-----BEGIN CERTIFICATE-----"); // 输出第二个双引号 Keyboard.press(KEY_LEFT_SHIFT); Keyboard.print('\''); Keyboard.releaseAll(); // 输出命令剩余部分 Keyboard.print(" >> text.txt");
如果运行后输出仍有偏差,可以直接查询你当前系统键盘布局下双引号对应的按键组合,调整上述按键模拟逻辑即可。
方案2:修改系统键盘布局
将运行PowerShell的系统的默认键盘布局临时切换为美式英文(US QWERTY),原有代码无需修改即可输出预期结果。
内容的提问来源于stack exchange,提问作者Nawad Aga
相关产品推荐
相关产品推荐

