Arduino如何发送ctrl+;带左键的z修改器
我试图让arduino板上的一个简单按钮在按下时执行ctrl+z命令(用于撤消)。我知道Arduino中ctrl的修饰符是Arduino如何发送ctrl+;带左键的z修改器,arduino,usb,keyboard-events,ctrl,Arduino,Usb,Keyboard Events,Ctrl,我试图让arduino板上的一个简单按钮在按下时执行ctrl+z命令(用于撤消)。我知道Arduino中ctrl的修饰符是KEY\u LEFT\u ctrl 我的按钮的结构如下所示,发送单个字母可以很好地工作,但是KEY\u LEFT\u CTRL似乎不适用。我尝试了一些尝试,当前代码在下面编译,但只发送Z enum { sw0=3, sw1=4, sw2=5, sw3=6, sw4=7, sw5=8, sw6=9, sw7=10}; // Switchbutton lines enum { n
KEY\u LEFT\u ctrl
我的按钮的结构如下所示,发送单个字母可以很好地工作,但是KEY\u LEFT\u CTRL
似乎不适用。我尝试了一些尝试,当前代码在下面编译,但只发送Z
enum { sw0=3, sw1=4, sw2=5, sw3=6, sw4=7, sw5=8, sw6=9, sw7=10}; // Switchbutton lines
enum { nSwitches=8, bounceMillis=42}; // # of switches; debounce delay
struct ButtonStruct {
unsigned long int bounceEnd; // Debouncing-flag and end-time
// Switch number, press-action, release-action, and prev reading
byte swiNum, swiActP, swiActR, swiPrev;
};
struct ButtonStruct buttons[nSwitches] = {
{0, sw0, 'A'},
{0, sw1, 'B'},
{0, sw2, 'C'},
{0, sw3, 'D'},
{0, sw4, 'E'},
{0, sw5, 'F'},
{0, sw6, 'G'},
{0, sw7, 'H'}};
//--------------------------------------------------------
void setup() {
for (int i=0; i<nSwitches; ++i)
pinMode(buttons[i].swiNum, INPUT_PULLUP);
Keyboard.begin();
}
//--------------------------------------------------------
byte readSwitch (byte swiNum) {
// Following inverts the pin reading (assumes pulldown = pressed)
return 1 - digitalRead(swiNum);
}
//--------------------------------------------------------
void doAction(byte swin, char code, char action) {
Keyboard.write(action);
}
//--------------------------------------------------------
void doButton(byte bn) {
struct ButtonStruct *b = buttons + bn;
if (b->bounceEnd) { // Was button changing?
// It was changing, see if debounce time is done.
if (b->bounceEnd < millis()) {
b->bounceEnd = 0; // Debounce time is done, so clear flag
// See if the change was real, or a glitch
if (readSwitch(b->swiNum) == b->swiPrev) {
// Current reading is same as trigger reading, so do it
if (b->swiPrev) {
doAction(b->swiNum, 'P', b->swiActP);
} else {
doAction(b->swiNum, 'R', b->swiActR);
}
}
}
} else { // It wasn't changing; but see if it's changing now
if (b->swiPrev != readSwitch(b->swiNum)) {
b->swiPrev = readSwitch(b->swiNum);
b->bounceEnd = millis()+bounceMillis; // Set the Debounce flag
}
}
}
//--------------------------------------------------------
long int seconds, prevSec=0;
void loop() {
for (int i=0; i<nSwitches; ++i)
doButton(i);
}
enum{sw0=3,sw1=4,sw2=5,sw3=6,sw4=7,sw5=8,sw6=9,sw7=10};//开关按钮线路
枚举{nSwitches=8,bounceMillis=42};/#开关的设计;去盎司延迟
结构按钮结构{
unsigned long int bounceen;//去抖动标志和结束时间
//开关编号、按下操作、释放操作和上一读数
字节swiNum、swiActP、swiActR、swiprov;
};
结构按钮结构按钮[n开关]={
{0,sw0,'A'},
{0,sw1,'B'},
{0,sw2,'C'},
{0,sw3,'D'},
{0,sw4,'E'},
{0,sw5,'F'},
{0,sw6,'G'},
{0,sw7,'H'};
//--------------------------------------------------------
无效设置(){
对于(inti=0;ibounceEnd){//按钮是否在更改?
//它正在改变,看看去盎司时间是否完成。
如果(b->bounceEndbounceEnd=0;//解除盎司时间结束,所以清除标记
//看看变化是真的,还是小故障
如果(读取开关(b->swiNum)==b->swiPrev){
//当前读数与触发器读数相同,请执行此操作
如果(b->swiprov){
doAction(b->swiNum,'P',b->swiActP);
}否则{
doAction(b->swiNum,'R',b->swiActR);
}
}
}
}否则{//它没有改变;但看看它现在是否在改变
如果(b->swiprov!=readSwitch(b->swiNum)){
b->swiprov=readSwitch(b->swium);
b->bounceEnd=millis()+bounceEmillis;//设置去盎司标志
}
}
}
//--------------------------------------------------------
长整数秒,prevSec=0;
void循环(){
对于(int i=0;i,在官方的Arduino教程网站上,您可以使用ctrl
第二行肯定不是enum的作用。我看过官方教程,但我不明白如何在数组的作用域中插入ctrl-z命令,因为它在上面。{0,sw0,应该在这里}我不能放置两个键盘。按数组中的方法来实现一次击键。你设计了这个结构吗?我的意思是,如果你这样做了,你知道要用它做什么…没有更多的代码,我说不出任何事情。我显示了这个方法,所以我有点迷路。我更新了完整的代码,也更好地表达了新代码e下面的问题迪特。
#include "Keyboard.h"
// use this option for OSX.
// Comment it out if using Windows or Linux:
char ctrlKey = KEY_LEFT_GUI;
// use this option for Windows and Linux.
// leave commented out if using OSX:
// char ctrlKey = KEY_LEFT_CTRL;
/*
*SETUP CODE
*/
Keyboard.press(ctrlKey);
Keyboard.press('n');
delay(100);
Keyboard.releaseAll();