11
Diff: keypad.cpp
- Revision:
- 10:9a9ec143840b
- Parent:
- 0:2df66331c109
- Child:
- 11:a45e64141ce6
--- a/keypad.cpp Tue Jan 31 00:31:58 2012 +0000 +++ b/keypad.cpp Fri Nov 02 22:42:28 2012 +0000 @@ -3,39 +3,50 @@ Keypad::Keypad(PinName row3, PinName row2, PinName row1, PinName row0, PinName col3, PinName col2, PinName col1, PinName col0, int debounce_ms): - _row0(row0), _row1(row1), _row2(row2), _row3(row3), - _cols(col0, col1, col2, col3) { + _row0(row0), _row1(row1), _row2(row2), _row3(row3), + _cols(col0, col1, col2, col3) +{ _debounce = debounce_ms; - _setupRiseTrigger(); + _row0.mode(PullUp); + _row1.mode(PullUp); + _row2.mode(PullUp); + _row3.mode(PullUp); + _cols.mode(OpenDrain); + _cols.output(); + _setupFallTrigger(); } -void Keypad::Start(void) { - _cols = 0x0F; -} - -void Keypad::Stop(void) { +void Keypad::Start(void) +{ _cols = 0x00; } -void Keypad::CallAfterInput(uint32_t (*fptr)(uint32_t index)) { +void Keypad::Stop(void) +{ + _cols = 0x0F; +} + +void Keypad::CallAfterInput(uint32_t (*fptr)(uint32_t index)) +{ _input.attach(fptr); } -void Keypad::_callback(int row, InterruptIn &therow) { +void Keypad::_callback(int row, InterruptIn &therow) +{ wait_ms(_debounce); - if (therow != 1) + if (therow != 0) return; int c = -1; - _cols = _cols & 0x0E; + _cols = 0x0E; if (therow == 0) c = 0; else { - _cols = _cols & 0x0D; + _cols = 0x0D; if (therow == 0) c = 1; else { - _cols = _cols & 0x0B; + _cols = 0x0B; if (therow == 0) c = 2; else @@ -46,22 +57,27 @@ Start(); // Re-energize all columns } -void Keypad::_cbRow0Rise(void) { +void Keypad::_cbRow0Fall(void) +{ _callback(0, _row0); } -void Keypad::_cbRow1Rise(void) { +void Keypad::_cbRow1Fall(void) +{ _callback(1, _row1); } -void Keypad::_cbRow2Rise(void) { +void Keypad::_cbRow2Fall(void) +{ _callback(2, _row2); } -void Keypad::_cbRow3Rise(void) { +void Keypad::_cbRow3Fall(void) +{ _callback(3, _row3); } -void Keypad::_setupRiseTrigger(void) { - _row0.rise(this, &Keypad::_cbRow0Rise); - _row1.rise(this, &Keypad::_cbRow1Rise); - _row2.rise(this, &Keypad::_cbRow2Rise); - _row3.rise(this, &Keypad::_cbRow3Rise); -} \ No newline at end of file +void Keypad::_setupFallTrigger(void) +{ + _row0.fall(this, &Keypad::_cbRow0Fall); + _row1.fall(this, &Keypad::_cbRow1Fall); + _row2.fall(this, &Keypad::_cbRow2Fall); + _row3.fall(this, &Keypad::_cbRow3Fall); +}