3x4 keypad library (Extended not only 3x4 but 4x4,4x5 and 5x5 keys)

Dependents:   Keypad_input_OS2 Keypad_input

see /users/kenjiArai/notebook/keypadkey-matrix--control/

Committer:
kenjiArai
Date:
Sat Sep 30 23:17:15 2017 +0000
Revision:
0:b7249629f337
Child:
1:ed0ad90ad734
4x3 keypad library / 1st release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:b7249629f337 1 /*
kenjiArai 0:b7249629f337 2 * Mbed Library / Akizuki AE-KIT45-KEYPAD4X3
kenjiArai 0:b7249629f337 3 * http://akizukidenshi.com/catalog/g/gK-12229/
kenjiArai 0:b7249629f337 4 *
kenjiArai 0:b7249629f337 5 * Copyright (c) 2017 Kenji Arai / JH1PJL
kenjiArai 0:b7249629f337 6 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:b7249629f337 7 * http://mbed.org/users/kenjiArai/
kenjiArai 0:b7249629f337 8 * Created: September 27th, 2017
kenjiArai 0:b7249629f337 9 * Revised: October 1st, 2017
kenjiArai 0:b7249629f337 10 */
kenjiArai 0:b7249629f337 11
kenjiArai 0:b7249629f337 12 #ifndef KEYPAD_H
kenjiArai 0:b7249629f337 13 #define KEYPAD_H
kenjiArai 0:b7249629f337 14
kenjiArai 0:b7249629f337 15 #include "mbed.h"
kenjiArai 0:b7249629f337 16
kenjiArai 0:b7249629f337 17 #define CHNG_CNT 3
kenjiArai 0:b7249629f337 18
kenjiArai 0:b7249629f337 19 /**
kenjiArai 0:b7249629f337 20 * @code
kenjiArai 0:b7249629f337 21 * #include "mbed.h"
kenjiArai 0:b7249629f337 22 * #include "Keypad.h"
kenjiArai 0:b7249629f337 23 *
kenjiArai 0:b7249629f337 24 * // every 2ms runs 6uS for key detection (CPU occupancy is 0.3%)
kenjiArai 0:b7249629f337 25 * // output port X Y Z
kenjiArai 0:b7249629f337 26 * // Input A * 0 #
kenjiArai 0:b7249629f337 27 * // Input B 7 8 9
kenjiArai 0:b7249629f337 28 * // Input C 4 5 6
kenjiArai 0:b7249629f337 29 * // Input D 1 2 3
kenjiArai 0:b7249629f337 30 * // X Y Z A B C D OUT(XYZ), IN(ABCD)
kenjiArai 0:b7249629f337 31 * Keypad key(D10, D9, D8, D7, D6, D5, D4);
kenjiArai 0:b7249629f337 32 *
kenjiArai 0:b7249629f337 33 * // define key number at main routine
kenjiArai 0:b7249629f337 34 * char *const key_table = "?*7410852#963"; // key_table[0]=? is not used!
kenjiArai 0:b7249629f337 35 *
kenjiArai 0:b7249629f337 36 * int main() {
kenjiArai 0:b7249629f337 37 * uint32_t key_num;
kenjiArai 0:b7249629f337 38 * while(true) {
kenjiArai 0:b7249629f337 39 * while ((key_num = key.read()) != 0){
kenjiArai 0:b7249629f337 40 * printf("%c\r\n", *(key_table + key_num));
kenjiArai 0:b7249629f337 41 * }
kenjiArai 0:b7249629f337 42 * wait(1.0);
kenjiArai 0:b7249629f337 43 * }
kenjiArai 0:b7249629f337 44 * }
kenjiArai 0:b7249629f337 45 * @endcode
kenjiArai 0:b7249629f337 46 */
kenjiArai 0:b7249629f337 47
kenjiArai 0:b7249629f337 48 class Keypad {
kenjiArai 0:b7249629f337 49 public:
kenjiArai 0:b7249629f337 50 /** 4x3 keypad interface:
kenjiArai 0:b7249629f337 51 * @param key input port A,B,C,D
kenjiArai 0:b7249629f337 52 * @param key output(scan) port X,Y,Z
kenjiArai 0:b7249629f337 53 */
kenjiArai 0:b7249629f337 54 Keypad(PinName kx, PinName ky, PinName kz,
kenjiArai 0:b7249629f337 55 PinName ka, PinName kb, PinName kc, PinName kd);
kenjiArai 0:b7249629f337 56
kenjiArai 0:b7249629f337 57 /** Read key data into buffer
kenjiArai 0:b7249629f337 58 * @param none
kenjiArai 0:b7249629f337 59 * @return key number 1 to 12 (0 = no key action)
kenjiArai 0:b7249629f337 60 */
kenjiArai 0:b7249629f337 61 uint8_t read(void);
kenjiArai 0:b7249629f337 62
kenjiArai 0:b7249629f337 63 protected:
kenjiArai 0:b7249629f337 64 DigitalIn *k_in[4];
kenjiArai 0:b7249629f337 65 DigitalOut *k_out[3];
kenjiArai 0:b7249629f337 66 Ticker tk;
kenjiArai 0:b7249629f337 67
kenjiArai 0:b7249629f337 68 // key control
kenjiArai 0:b7249629f337 69 enum State {Off_state, Off_to_on_transient, On_state, On_to_off_transient};
kenjiArai 0:b7249629f337 70 volatile State key_state[3][4];
kenjiArai 0:b7249629f337 71 volatile int8_t key_transent_cntr[3][4];
kenjiArai 0:b7249629f337 72 void key_scan(void);
kenjiArai 0:b7249629f337 73
kenjiArai 0:b7249629f337 74 // buffer control
kenjiArai 0:b7249629f337 75 uint8_t read_addr;
kenjiArai 0:b7249629f337 76 uint8_t write_addr;
kenjiArai 0:b7249629f337 77 uint8_t buf[32];
kenjiArai 0:b7249629f337 78 void bf_put (char dat);
kenjiArai 0:b7249629f337 79 int8_t bf_get (void);
kenjiArai 0:b7249629f337 80
kenjiArai 0:b7249629f337 81 };
kenjiArai 0:b7249629f337 82
kenjiArai 0:b7249629f337 83 #endif // KEYPAD_H