Tests forked Keypad library.

Dependencies:   FPointer keypad mbed

Schematic:

http://schind.nl/keypad.png

No extra hardware is needed besides the wires and switches. The columns are outputs configured with open drain. The rows are inputs configured with pull up resistors. A key press pulls down its row. With scanning the column is determined thereafter.

See keypad for the forked library used in this project.

Committer:
gj_schoneveld
Date:
Sun Nov 04 09:56:51 2012 +0000
Revision:
4:16191e501b63
Parent:
3:fb173f712440
Small bug

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gj_schoneveld 1:8bbe2b267de6 1 #include "mbed.h"
gj_schoneveld 1:8bbe2b267de6 2 #include "keypad.h"
gj_schoneveld 1:8bbe2b267de6 3
gj_schoneveld 1:8bbe2b267de6 4 // Define your own keypad values
gj_schoneveld 1:8bbe2b267de6 5 char Keytable[] = { '1', '2', '3', 'A',
gj_schoneveld 1:8bbe2b267de6 6 '4', '5', '6', 'B',
gj_schoneveld 1:8bbe2b267de6 7 '7', '8', '9', 'C',
gj_schoneveld 1:8bbe2b267de6 8 '*', '0', '#', 'D'
gj_schoneveld 1:8bbe2b267de6 9 };
gj_schoneveld 1:8bbe2b267de6 10
gj_schoneveld 1:8bbe2b267de6 11 BusOut code(LED4, LED3, LED2, LED1); //show binary code of key
gj_schoneveld 1:8bbe2b267de6 12
gj_schoneveld 1:8bbe2b267de6 13 uint32_t cbAfterInput(uint32_t key)
gj_schoneveld 1:8bbe2b267de6 14 {
gj_schoneveld 1:8bbe2b267de6 15 printf("Key: %d => \'%c\'\n", key, Keytable[key]);
gj_schoneveld 1:8bbe2b267de6 16 code = key;
gj_schoneveld 1:8bbe2b267de6 17
gj_schoneveld 1:8bbe2b267de6 18 return 0;
gj_schoneveld 1:8bbe2b267de6 19 }
gj_schoneveld 1:8bbe2b267de6 20
gj_schoneveld 3:fb173f712440 21 uint32_t cbAfterMultipleInput(uint32_t key)
gj_schoneveld 3:fb173f712440 22 {
gj_schoneveld 3:fb173f712440 23 for (int i = 0; i < 16; i++) {
gj_schoneveld 3:fb173f712440 24 if (key & (1 << i)) {
gj_schoneveld 3:fb173f712440 25 printf("Key: %d => \'%c\'\t", i, Keytable[i]);
gj_schoneveld 3:fb173f712440 26 }
gj_schoneveld 3:fb173f712440 27 }
gj_schoneveld 3:fb173f712440 28 printf("\n");
gj_schoneveld 3:fb173f712440 29 code = key;
gj_schoneveld 3:fb173f712440 30
gj_schoneveld 3:fb173f712440 31 return 0;
gj_schoneveld 3:fb173f712440 32 }
gj_schoneveld 3:fb173f712440 33
gj_schoneveld 1:8bbe2b267de6 34 void Sleep(void)
gj_schoneveld 1:8bbe2b267de6 35 {
gj_schoneveld 1:8bbe2b267de6 36 __WFI();
gj_schoneveld 1:8bbe2b267de6 37 }
gj_schoneveld 1:8bbe2b267de6 38
gj_schoneveld 1:8bbe2b267de6 39 int main()
gj_schoneveld 1:8bbe2b267de6 40 {
gj_schoneveld 1:8bbe2b267de6 41 printf("*** Keypad Demo ***\n");
gj_schoneveld 1:8bbe2b267de6 42
gj_schoneveld 1:8bbe2b267de6 43 Keypad keypad(p25, p26, p27, p28, p21, p22, p23, p24);
gj_schoneveld 2:eaa3d23e9b29 44
gj_schoneveld 2:eaa3d23e9b29 45 // interrupt mode
gj_schoneveld 3:fb173f712440 46 /*
gj_schoneveld 1:8bbe2b267de6 47 keypad.CallAfterInput(&cbAfterInput);
gj_schoneveld 1:8bbe2b267de6 48 keypad.Start();
gj_schoneveld 1:8bbe2b267de6 49 while (1) {
gj_schoneveld 1:8bbe2b267de6 50 Sleep();
gj_schoneveld 1:8bbe2b267de6 51 }
gj_schoneveld 3:fb173f712440 52 */
gj_schoneveld 2:eaa3d23e9b29 53
gj_schoneveld 2:eaa3d23e9b29 54 // polling mode
gj_schoneveld 2:eaa3d23e9b29 55 /*
gj_schoneveld 2:eaa3d23e9b29 56 keypad.Start();
gj_schoneveld 2:eaa3d23e9b29 57 while (1) {
gj_schoneveld 3:fb173f712440 58 int key = keypad.DebouncedScan();
gj_schoneveld 2:eaa3d23e9b29 59 if (key >= 0)
gj_schoneveld 2:eaa3d23e9b29 60 cbAfterInput(key);
gj_schoneveld 2:eaa3d23e9b29 61 wait(0.1);
gj_schoneveld 2:eaa3d23e9b29 62 }
gj_schoneveld 2:eaa3d23e9b29 63 */
gj_schoneveld 3:fb173f712440 64
gj_schoneveld 3:fb173f712440 65 // poll multiple mode
gj_schoneveld 3:fb173f712440 66 keypad.Start();
gj_schoneveld 3:fb173f712440 67 while (1) {
gj_schoneveld 4:16191e501b63 68 int key = keypad.DebouncedScanMultiple();
gj_schoneveld 3:fb173f712440 69 if (key > 0)
gj_schoneveld 3:fb173f712440 70 cbAfterMultipleInput(key);
gj_schoneveld 3:fb173f712440 71 wait(0.1);
gj_schoneveld 3:fb173f712440 72 }
gj_schoneveld 0:5410e5950602 73 }