Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino如何发送ctrl+;带左键的z修改器_Arduino_Usb_Keyboard Events_Ctrl - Fatal编程技术网

Arduino如何发送ctrl+;带左键的z修改器

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

我试图让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 { 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();