Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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

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
C++ Arduino keypad.getState()似乎运行不正常_C++_Arduino - Fatal编程技术网

C++ Arduino keypad.getState()似乎运行不正常

C++ Arduino keypad.getState()似乎运行不正常,c++,arduino,C++,Arduino,因此,我们正在尝试为Arduino和Kerbal构建一个接口,我们成功地模拟了按键,但没有按住按键。下面的代码似乎在连续几次正确打印“保持”之前打印“未保持”。问题是,这就像是按了两次按钮,而不是按了一次再按住 我们的直觉是,某些逻辑在某个地方是错误的,但我似乎无法正确理解 #include <Keypad.h> #include <Keyboard.h> char previousPressedKey; boolean hasReleasedKey = false;

因此,我们正在尝试为Arduino和Kerbal构建一个接口,我们成功地模拟了按键,但没有按住按键。下面的代码似乎在连续几次正确打印“保持”之前打印“未保持”。问题是,这就像是按了两次按钮,而不是按了一次再按住

我们的直觉是,某些逻辑在某个地方是错误的,但我似乎无法正确理解

#include <Keypad.h>
#include <Keyboard.h>

char previousPressedKey;
boolean hasReleasedKey = false;

const byte ROWS = 6; //four rows
    const byte COLS = 6; //four columns
    //define the cymbols on the buttons of the keypads
    char keys[ROWS][COLS] = {
      {'w','i','1','7','c','v'},
      {'a','j','2','8','m','u'},
      {'s','k','3','9',',','.'},
      {'d','l','4','0','z','x'},
      {'e','h','5','t','b','g'},
      {'q','n','6','r','y','o'},

    };
    byte rowPins[ROWS] = {6, 5, 4, 3, 2, 10}; //connect to the row pinouts of the keypad
    byte colPins[COLS] = {16, 15, 14, 9, 8, 7}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// -- Keypad related ends

void setup(){
  Serial.begin(9600);
  delay(1000);
}

void loop(){
  delay(50);
  keypadLoop();
}  

void keypadLoop() {
  char key = keypad.getKey();
  KeyState state = keypad.getState();

  if (state == HOLD){
    // if key is held
    //Keyboard.println(key);
    //Keyboard.println(previousPressedKey);
    Keyboard.println("holding ");
  }

  if (state == PRESSED && key != NO_KEY) {
    //previousPressedKey = key;
    hasReleasedKey = true;
    //Keyboard.print(key);
    Keyboard.print("NOT HOLDING ");
  }

}
当预期输出为:

holding 
holding 
holding 
holding 
holding 
holding 
holding 
holding 
holding 
holding 

怎么了?您必须先按键才能按住它,不是吗?按键后,状态变为按下。一段时间(保持时间)后,状态变为保持。您可以使用
setHoldTime
更改保持时间。我们的问题似乎是它像按下按钮“两次”之前,它举行。我们的理想是将它按一次并保持不变。就像普通键盘一样。好的,我们将值设置为
keypad.setHoldTime(100)这有点有效,RCS(助推器)正在打开,就像您在键盘上按它一样,但我们现在担心的是其他键的行为可能会受到影响。注意,还删除了
延迟(50)不应该在那里。
holding 
holding 
holding 
holding 
holding 
holding 
holding 
holding 
holding 
holding