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