I am unable to get a HOLD status from a key press even though I hold it down for a long time. The only response seems to be when I initially press a key. The attached file is a sample serial monitor output. It represents 4 key presses: first f key, second f key held for about 2 minutes, third 1 key, then 1 key again but held for more than a minute.
I must not be understanding the return from the event listener or getstate function.
Suggestions?
[code[#include <Arduino.h>
#include <Key.h>
#include <Keypad.h>
// matrix keys are attached to pins 2 through 9
const byte ROWS=4; //four rows
const byte COLS=4; //four columns
char keys[ROWS][COLS]=
{
{'0','1','2','3'},
{'4','5','6','7'},
{'8','9','a','b'},
{'c','d','e','f'}
};
byte rowPins[ROWS]={5,4,3,2};
byte colPins[COLS]={9,8,7,6};
Keypad keypad = Keypad( makeKeymap(keys), rowPins,colPins, ROWS, COLS );
char key;
// Taking care of some special events.
void keypresent(){
Serial.println(key);
switch (keypad.getState ()){
case RELEASED:
Serial.print("Released key # " );
Serial.println(key);
break;
case HOLD:
Serial.print("Hold key # " );
Serial.println(key);
break;
case IDLE:
Serial.print("Idle key # " );
Serial.println(key);
break;
case PRESSED:
Serial.print("Pressed key # " );
Serial.println(key);
break;
}
}
void setup()
{
Serial.begin(9600);
// now we can begin to set up the key matrix handling
//keypad.addEventListener(keypadEvent); //add an event listener
keypad.setHoldTime(2000); //set key hold time to 2 seconds
keypad.setDebounceTime(25); //set debounce time to 25 millisecond
Serial.println("setup complete");
}
void loop() {
key = keypad.getKey();
// Serial.print("each tme through the loop");
// Serial.println(key);
// delay(25);
if(key != NO_KEY ){
Serial.println(key);
keypresent();
}
}
// Taking care of some special events.
void keypadEvent(KeypadEvent key){
Serial.println("keypad event entry");
switch (keypad.getState()){
case IDLE:{
Serial.println("idle state");
}
case HOLD:{
Serial.print("key held ");
Serial.println(key);
}
break;
case RELEASED:
if (key == 'c') {
Serial.println("key was released");
}
break;
case PRESSED:{
Serial.print("key pressed ");
Serial.println(key);
}
break;
}
Serial.println("exit keypad event");
}/code]
Key test.txt (110 Bytes)