11

Dependents:   Program_R11

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);
+}