Sense multiple keypresses from a 4x4 keypad

Dependencies:   Hotboards_keypad mbed

Fork of Hotboards_MultiKey by Hotboards MX

Committer:
RomanValenciaP
Date:
Tue Mar 08 20:45:33 2016 +0000
Revision:
0:d39ee4a4aec6
Child:
1:bd23ec9647fd
first release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RomanValenciaP 0:d39ee4a4aec6 1
RomanValenciaP 0:d39ee4a4aec6 2 #include "mbed.h"
RomanValenciaP 0:d39ee4a4aec6 3 #include "Hotboards_keypad.h"
RomanValenciaP 0:d39ee4a4aec6 4 #include <string>
RomanValenciaP 0:d39ee4a4aec6 5
RomanValenciaP 0:d39ee4a4aec6 6 using std::string;
RomanValenciaP 0:d39ee4a4aec6 7
RomanValenciaP 0:d39ee4a4aec6 8 // Defines the keys array with it's respective number of rows & cols,
RomanValenciaP 0:d39ee4a4aec6 9 // and with the value of each key
RomanValenciaP 0:d39ee4a4aec6 10 char keys[ 4 ][ 4 ] =
RomanValenciaP 0:d39ee4a4aec6 11 {
RomanValenciaP 0:d39ee4a4aec6 12 { '1' , '2' , '3' , 'A' },
RomanValenciaP 0:d39ee4a4aec6 13 { '4' , '5' , '6' , 'B' },
RomanValenciaP 0:d39ee4a4aec6 14 { '7' , '8' , '9' , 'C' },
RomanValenciaP 0:d39ee4a4aec6 15 { '*' , '0' , '#' , 'D' }
RomanValenciaP 0:d39ee4a4aec6 16 };
RomanValenciaP 0:d39ee4a4aec6 17
RomanValenciaP 0:d39ee4a4aec6 18 // Defines the pins connected to the rows
RomanValenciaP 0:d39ee4a4aec6 19 DigitalInOut rowPins[ 4 ] = { PA_6 , PA_7 , PB_6 , PC_7 };
RomanValenciaP 0:d39ee4a4aec6 20 // Defines the pins connected to the cols
RomanValenciaP 0:d39ee4a4aec6 21 DigitalInOut colPins[ 4 ] = { PA_8 , PB_10 , PB_4 , PB_5 };
RomanValenciaP 0:d39ee4a4aec6 22
RomanValenciaP 0:d39ee4a4aec6 23 // Creates a new keyboard with the values entered before
RomanValenciaP 0:d39ee4a4aec6 24 Keypad kpd( makeKeymap( keys ) , rowPins , colPins , 4 , 4 );
RomanValenciaP 0:d39ee4a4aec6 25
RomanValenciaP 0:d39ee4a4aec6 26 // Configures the serial port
RomanValenciaP 0:d39ee4a4aec6 27 Serial pc( USBTX , USBRX );
RomanValenciaP 0:d39ee4a4aec6 28
RomanValenciaP 0:d39ee4a4aec6 29 int i;
RomanValenciaP 0:d39ee4a4aec6 30
RomanValenciaP 0:d39ee4a4aec6 31 int main()
RomanValenciaP 0:d39ee4a4aec6 32 {
RomanValenciaP 0:d39ee4a4aec6 33 string msg;
RomanValenciaP 0:d39ee4a4aec6 34 while(1)
RomanValenciaP 0:d39ee4a4aec6 35 {
RomanValenciaP 0:d39ee4a4aec6 36 // Fills kpd.key[ ] array with up-to 10 active keys.
RomanValenciaP 0:d39ee4a4aec6 37 // Returns true if there are ANY active keys.
RomanValenciaP 0:d39ee4a4aec6 38 if( kpd.getKeys( ) )
RomanValenciaP 0:d39ee4a4aec6 39 {
RomanValenciaP 0:d39ee4a4aec6 40 // Scan the whole key list.
RomanValenciaP 0:d39ee4a4aec6 41 for( i = 0 ; i <= LIST_MAX ; i++ )
RomanValenciaP 0:d39ee4a4aec6 42 {
RomanValenciaP 0:d39ee4a4aec6 43 // Only find keys that have changed state.
RomanValenciaP 0:d39ee4a4aec6 44 if( kpd.key[ i ].stateChanged )
RomanValenciaP 0:d39ee4a4aec6 45 {
RomanValenciaP 0:d39ee4a4aec6 46 // Report active key state : IDLE, PRESSED, HOLD, or RELEASED
RomanValenciaP 0:d39ee4a4aec6 47 switch( kpd.key[ i ].kstate )
RomanValenciaP 0:d39ee4a4aec6 48 {
RomanValenciaP 0:d39ee4a4aec6 49 case PRESSED:
RomanValenciaP 0:d39ee4a4aec6 50 msg = " PRESSED. ";
RomanValenciaP 0:d39ee4a4aec6 51 break;
RomanValenciaP 0:d39ee4a4aec6 52 case HOLD:
RomanValenciaP 0:d39ee4a4aec6 53 msg = " HOLD. ";
RomanValenciaP 0:d39ee4a4aec6 54 break;
RomanValenciaP 0:d39ee4a4aec6 55 case RELEASED:
RomanValenciaP 0:d39ee4a4aec6 56 msg = " RELEASED. ";
RomanValenciaP 0:d39ee4a4aec6 57 break;
RomanValenciaP 0:d39ee4a4aec6 58 case IDLE:
RomanValenciaP 0:d39ee4a4aec6 59 msg = " IDLE. ";
RomanValenciaP 0:d39ee4a4aec6 60 break;
RomanValenciaP 0:d39ee4a4aec6 61 default:
RomanValenciaP 0:d39ee4a4aec6 62 break;
RomanValenciaP 0:d39ee4a4aec6 63 }
RomanValenciaP 0:d39ee4a4aec6 64 // Print the current state of the key pressed
RomanValenciaP 0:d39ee4a4aec6 65 pc.printf( "Key " );
RomanValenciaP 0:d39ee4a4aec6 66 pc.printf( "%c" , kpd.key[ i ].kchar );
RomanValenciaP 0:d39ee4a4aec6 67 pc.printf( "%s" , msg.c_str() );
RomanValenciaP 0:d39ee4a4aec6 68 pc.printf( "\n\r" );
RomanValenciaP 0:d39ee4a4aec6 69 }
RomanValenciaP 0:d39ee4a4aec6 70 }
RomanValenciaP 0:d39ee4a4aec6 71 }
RomanValenciaP 0:d39ee4a4aec6 72 }
RomanValenciaP 0:d39ee4a4aec6 73 }