Keypad library prototype

Dependencies:   mbed TextLCD

Revision:
0:aed236b6c48e
Child:
1:db0e3fb4d3c4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon May 21 21:59:31 2018 +0000
@@ -0,0 +1,67 @@
+#include "mbed.h"
+#include "TextLCD.h"
+
+PinName rowPins[4] = { PA_13, PA_14, PC_2, PC_3 };
+PinName colPins[4] = { PA_0, PA_1, PA_4, PB_0 };
+
+DigitalOut* _rows[4];
+DigitalIn* _cols[4];
+
+TextLCD lcd(D2,D3,D4,D5,D6,D7); 
+
+// Define your own keypad values
+char Keytable[] = { 
+    '1', '2', '3', 'A', // r0
+    '4', '5', '6', 'B', // r1
+    '7', '8', '9', 'C', // r2
+    '*', '0', '#', 'D'  // r3
+  // c0   c1  c2   c3
+};
+
+int getKeyIndex() {
+    int result = -1;
+    for (int r = 0; r < 4; r++) {
+        _rows[r]->write(1);
+        for(int c = 0;c < 4 ;c++){
+            DigitalIn *col = _cols[c];
+            if(col->read() == 1) {
+                result = r*4+c;
+            }
+        }
+        _rows[r]->write(0);
+    }
+    return result;
+}
+
+char getKey() {
+    int idx = getKeyIndex();
+    return idx != -1 ? Keytable[idx] : '\0';
+}
+
+void init() {
+    for(int i = 0;i < 4; i++){
+        _rows[i] = new DigitalOut(rowPins[i]);
+        _rows[i]->write(0);
+    }
+    for(int i = 0;i < 4; i++){
+        _cols[i] = new DigitalIn(colPins[i],PullDown);
+    }
+}
+
+int main() {
+    char key;
+    lcd.locate(0,0);
+    lcd.printf("Clean");    
+    
+    init();   
+    
+    while(1) {
+        key = getKey();
+        lcd.locate(0,1);
+        if (key != '\0') {
+            lcd.printf("%c", key);
+        } else  {
+            lcd.printf("%c", ' ');
+        }
+    }
+}