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/
Keypad.h@1:ed0ad90ad734, 2017-09-30 (annotated)
- Committer:
- kenjiArai
- Date:
- Sat Sep 30 23:26:44 2017 +0000
- Revision:
- 1:ed0ad90ad734
- Parent:
- 0:b7249629f337
- Child:
- 2:a3545b56bdd7
small modification
Who changed what in which revision?
User | Revision | Line number | New 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 | 1:ed0ad90ad734 | 59 | * @return key number by ASCII code |
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 | 1:ed0ad90ad734 | 75 | #define BF_SIZE 16 |
kenjiArai | 0:b7249629f337 | 76 | uint8_t read_addr; |
kenjiArai | 0:b7249629f337 | 77 | uint8_t write_addr; |
kenjiArai | 1:ed0ad90ad734 | 78 | uint8_t buf[BF_SIZE]; |
kenjiArai | 0:b7249629f337 | 79 | void bf_put (char dat); |
kenjiArai | 0:b7249629f337 | 80 | int8_t bf_get (void); |
kenjiArai | 0:b7249629f337 | 81 | |
kenjiArai | 0:b7249629f337 | 82 | }; |
kenjiArai | 0:b7249629f337 | 83 | |
kenjiArai | 0:b7249629f337 | 84 | #endif // KEYPAD_H |