11

Dependents:   Program_R11

Committer:
yoonghm
Date:
Mon Jan 30 09:55:13 2012 +0000
Revision:
2:2e4900821a28
Parent:
1:b5eee44fa8a2
Child:
3:ecd4bb97a033
Documentation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yoonghm 0:2df66331c109 1 /* mbed Keypad library, using user-defined interrupt callback
yoonghm 0:2df66331c109 2 * Copyright (c) 2012 Yoong Hor Meng
yoonghm 0:2df66331c109 3 *
yoonghm 0:2df66331c109 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
yoonghm 0:2df66331c109 5 * of this software and associated documentation files (the "Software"), to deal
yoonghm 0:2df66331c109 6 * in the Software without restriction, including without limitation the rights
yoonghm 0:2df66331c109 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
yoonghm 0:2df66331c109 8 * copies of the Software, and to permit persons to whom the Software is
yoonghm 0:2df66331c109 9 * furnished to do so, subject to the following conditions:
yoonghm 0:2df66331c109 10 *
yoonghm 0:2df66331c109 11 * The above copyright notice and this permission notice shall be included in
yoonghm 0:2df66331c109 12 * all copies or substantial portions of the Software.
yoonghm 0:2df66331c109 13 *
yoonghm 0:2df66331c109 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
yoonghm 0:2df66331c109 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
yoonghm 0:2df66331c109 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
yoonghm 0:2df66331c109 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
yoonghm 0:2df66331c109 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
yoonghm 0:2df66331c109 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
yoonghm 0:2df66331c109 20 * THE SOFTWARE
yoonghm 0:2df66331c109 21 */
yoonghm 0:2df66331c109 22
yoonghm 0:2df66331c109 23 #ifndef KEYPAD_H
yoonghm 0:2df66331c109 24 #define KEYPAD_H
yoonghm 0:2df66331c109 25
yoonghm 0:2df66331c109 26 #include "mbed.h"
yoonghm 0:2df66331c109 27 #include "FPointer.h"
yoonghm 0:2df66331c109 28
yoonghm 0:2df66331c109 29 /**
yoonghm 1:b5eee44fa8a2 30 * An interrupt-based interface to 4x4 keypad.
yoonghm 1:b5eee44fa8a2 31 *
yoonghm 1:b5eee44fa8a2 32 * You also need to import FPointer library by Andy Kirkham
yoonghm 0:2df66331c109 33 *
yoonghm 0:2df66331c109 34 * On each key pressed on a keypad, the index of the key is passed to a
yoonghm 0:2df66331c109 35 * user-defined function. User is free to define what to be done with the
yoonghm 0:2df66331c109 36 * input.
yoonghm 0:2df66331c109 37 *
yoonghm 2:2e4900821a28 38 * Example:
yoonghm 0:2df66331c109 39 * @code
yoonghm 2:2e4900821a28 40 * #include "mbed.h"
yoonghm 2:2e4900821a28 41 * #include "keypad.h"
yoonghm 2:2e4900821a28 42 *
yoonghm 2:2e4900821a28 43 * // Define your own keypad values
yoonghm 2:2e4900821a28 44 * char Keytable[] = { '1', '2', '3', 'A',
yoonghm 2:2e4900821a28 45 * '4', '5', '6', 'B',
yoonghm 2:2e4900821a28 46 * '7', '8', '9', 'C',
yoonghm 2:2e4900821a28 47 * '*', '0', '#', 'D'
yoonghm 2:2e4900821a28 48 * };
yoonghm 2:2e4900821a28 49 *
yoonghm 2:2e4900821a28 50 * uint32_t cbAfterInput(uint32_t index) {
yoonghm 2:2e4900821a28 51 * printf("Index:%d => Key:%c\n", key, Keytable[index]);
yoonghm 2:2e4900821a28 52 * return 0;
yoonghm 2:2e4900821a28 53 * }
yoonghm 2:2e4900821a28 54 *
yoonghm 2:2e4900821a28 55 * int main() {
yoonghm 2:2e4900821a28 56 * Keypad keypad(p25, p26, p27, p28, p21, p22, p23, p24);
yoonghm 2:2e4900821a28 57 * keypad.CallAfterInput(&cbAfterInput);
yoonghm 2:2e4900821a28 58 * keypad.Start();
yoonghm 2:2e4900821a28 59 *
yoonghm 2:2e4900821a28 60 * while (1) {
yoonghm 2:2e4900821a28 61 * wait_ms(100);
yoonghm 2:2e4900821a28 62 * }
yoonghm 2:2e4900821a28 63 * }
yoonghm 2:2e4900821a28 64 * @endcode
yoonghm 2:2e4900821a28 65 */
yoonghm 0:2df66331c109 66 class Keypad {
yoonghm 0:2df66331c109 67 public:
yoonghm 0:2df66331c109 68 /** Create a Keypad interface
yoonghm 0:2df66331c109 69 *
yoonghm 0:2df66331c109 70 * @param row<3..0> Row data lines
yoonghm 0:2df66331c109 71 * @param col<3..0> Column data lines
yoonghm 0:2df66331c109 72 * @param debounce_ms Debounce in ms (Default to 20ms)
yoonghm 0:2df66331c109 73 */
yoonghm 0:2df66331c109 74 Keypad(PinName row3, PinName row2, PinName row1, PinName row0,
yoonghm 0:2df66331c109 75 PinName col3, PinName col2, PinName col1, PinName col0,
yoonghm 0:2df66331c109 76 int debounce_ms = 20);
yoonghm 0:2df66331c109 77
yoonghm 0:2df66331c109 78 /** Start the keypad interrupt routines
yoonghm 0:2df66331c109 79 */
yoonghm 0:2df66331c109 80 void Start(void);
yoonghm 0:2df66331c109 81
yoonghm 0:2df66331c109 82 /** Stop the keypad interrupt routines
yoonghm 0:2df66331c109 83 */
yoonghm 0:2df66331c109 84 void Stop(void);
yoonghm 0:2df66331c109 85
yoonghm 0:2df66331c109 86 /** User-defined function that to be called when a key is pressed
yoonghm 0:2df66331c109 87 * @param fptr A function pointer takes a uint32_t and
yoonghm 0:2df66331c109 88 * returns uint32_t
yoonghm 0:2df66331c109 89 */
yoonghm 0:2df66331c109 90 void CallAfterInput(uint32_t (*fptr)(uint32_t));
yoonghm 0:2df66331c109 91
yoonghm 0:2df66331c109 92 protected:
yoonghm 0:2df66331c109 93 InterruptIn _row0;
yoonghm 0:2df66331c109 94 InterruptIn _row1;
yoonghm 0:2df66331c109 95 InterruptIn _row2;
yoonghm 0:2df66331c109 96 InterruptIn _row3;
yoonghm 0:2df66331c109 97 BusOut _cols;
yoonghm 0:2df66331c109 98 int _debounce;
yoonghm 0:2df66331c109 99 FPointer _input; // Called after each input
yoonghm 0:2df66331c109 100
yoonghm 0:2df66331c109 101 void _callback(int row, InterruptIn &therow);
yoonghm 0:2df66331c109 102 void _cbRow0Rise(void);
yoonghm 0:2df66331c109 103 void _cbRow1Rise(void);
yoonghm 0:2df66331c109 104 void _cbRow2Rise(void);
yoonghm 0:2df66331c109 105 void _cbRow3Rise(void);
yoonghm 0:2df66331c109 106 void _setupRiseTrigger(void);
yoonghm 0:2df66331c109 107 void _dummy(void) { };
yoonghm 0:2df66331c109 108 };
yoonghm 0:2df66331c109 109
yoonghm 0:2df66331c109 110 #endif // KEYPAD_H