Fork without short circuits
Fork of keypad by
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 SaveKeypad for an example usage.
Diff: keypad.h
- Revision:
- 10:9a9ec143840b
- Parent:
- 9:e48ba5b4c497
- Child:
- 11:a45e64141ce6
--- a/keypad.h Tue Jan 31 00:31:58 2012 +0000 +++ b/keypad.h Fri Nov 02 22:42:28 2012 +0000 @@ -40,31 +40,32 @@ * @code * #include "mbed.h" * #include "keypad.h" - * + * * // Define your own keypad values * char Keytable[] = { '1', '2', '3', 'A', * '4', '5', '6', 'B', * '7', '8', '9', 'C', * '*', '0', '#', 'D' * }; - * + * * uint32_t cbAfterInput(uint32_t index) { * printf("Index:%d => Key:%c\n", key, Keytable[index]); * return 0; * } - * + * * int main() { * Keypad keypad(p25, p26, p27, p28, p21, p22, p23, p24); * keypad.CallAfterInput(&cbAfterInput); * keypad.Start(); - * + * * while (1) { * wait_ms(100); * } * } * @endcode */ -class Keypad { +class Keypad +{ public: /** Create a Keypad interface * @@ -95,17 +96,17 @@ InterruptIn _row1; InterruptIn _row2; InterruptIn _row3; - BusOut _cols; + BusInOut _cols; // BusOut doesn't support mode() yet; need open drain to prevent short circuits... int _debounce; FPointer _input; // Called after each input void _callback(int row, InterruptIn &therow); - void _cbRow0Rise(void); - void _cbRow1Rise(void); - void _cbRow2Rise(void); - void _cbRow3Rise(void); - void _setupRiseTrigger(void); + void _cbRow0Fall(void); + void _cbRow1Fall(void); + void _cbRow2Fall(void); + void _cbRow3Fall(void); + void _setupFallTrigger(void); void _dummy(void) { }; }; -#endif // KEYPAD_H \ No newline at end of file +#endif // KEYPAD_H