Keypad library prototype

Dependencies:   mbed TextLCD

Committer:
peps
Date:
Wed Apr 10 22:08:13 2019 +0000
Revision:
1:db0e3fb4d3c4
Parent:
0:aed236b6c48e
Improved keyboard handling.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
peps 0:aed236b6c48e 1 #include "mbed.h"
peps 0:aed236b6c48e 2 #include "TextLCD.h"
peps 0:aed236b6c48e 3
peps 0:aed236b6c48e 4 PinName rowPins[4] = { PA_13, PA_14, PC_2, PC_3 };
peps 0:aed236b6c48e 5 PinName colPins[4] = { PA_0, PA_1, PA_4, PB_0 };
peps 0:aed236b6c48e 6
peps 0:aed236b6c48e 7 DigitalOut* _rows[4];
peps 0:aed236b6c48e 8 DigitalIn* _cols[4];
peps 0:aed236b6c48e 9
peps 1:db0e3fb4d3c4 10 TextLCD lcd(D2,D3,D4,D5,D6,D7);
peps 0:aed236b6c48e 11
peps 0:aed236b6c48e 12 // Define your own keypad values
peps 1:db0e3fb4d3c4 13 char Keytable[] = {
peps 0:aed236b6c48e 14 '1', '2', '3', 'A', // r0
peps 0:aed236b6c48e 15 '4', '5', '6', 'B', // r1
peps 0:aed236b6c48e 16 '7', '8', '9', 'C', // r2
peps 0:aed236b6c48e 17 '*', '0', '#', 'D' // r3
peps 0:aed236b6c48e 18 // c0 c1 c2 c3
peps 0:aed236b6c48e 19 };
peps 0:aed236b6c48e 20
peps 0:aed236b6c48e 21 int getKeyIndex() {
peps 0:aed236b6c48e 22 int result = -1;
peps 1:db0e3fb4d3c4 23 for (int r = 0; r < 4 && result == -1; r++) {
peps 0:aed236b6c48e 24 _rows[r]->write(1);
peps 1:db0e3fb4d3c4 25 for(int c = 0; c < 4 && result == -1; c++){
peps 0:aed236b6c48e 26 DigitalIn *col = _cols[c];
peps 0:aed236b6c48e 27 if(col->read() == 1) {
peps 0:aed236b6c48e 28 result = r*4+c;
peps 0:aed236b6c48e 29 }
peps 0:aed236b6c48e 30 }
peps 0:aed236b6c48e 31 _rows[r]->write(0);
peps 0:aed236b6c48e 32 }
peps 0:aed236b6c48e 33 return result;
peps 0:aed236b6c48e 34 }
peps 0:aed236b6c48e 35
peps 0:aed236b6c48e 36 char getKey() {
peps 0:aed236b6c48e 37 int idx = getKeyIndex();
peps 0:aed236b6c48e 38 return idx != -1 ? Keytable[idx] : '\0';
peps 0:aed236b6c48e 39 }
peps 0:aed236b6c48e 40
peps 0:aed236b6c48e 41 void init() {
peps 0:aed236b6c48e 42 for(int i = 0;i < 4; i++){
peps 0:aed236b6c48e 43 _rows[i] = new DigitalOut(rowPins[i]);
peps 0:aed236b6c48e 44 _rows[i]->write(0);
peps 0:aed236b6c48e 45 }
peps 0:aed236b6c48e 46 for(int i = 0;i < 4; i++){
peps 0:aed236b6c48e 47 _cols[i] = new DigitalIn(colPins[i],PullDown);
peps 0:aed236b6c48e 48 }
peps 0:aed236b6c48e 49 }
peps 0:aed236b6c48e 50
peps 0:aed236b6c48e 51 int main() {
peps 0:aed236b6c48e 52 char key;
peps 0:aed236b6c48e 53 lcd.locate(0,0);
peps 1:db0e3fb4d3c4 54 lcd.printf("Clean");
peps 1:db0e3fb4d3c4 55
peps 1:db0e3fb4d3c4 56 init();
peps 1:db0e3fb4d3c4 57
peps 0:aed236b6c48e 58 while(1) {
peps 0:aed236b6c48e 59 key = getKey();
peps 0:aed236b6c48e 60 lcd.locate(0,1);
peps 0:aed236b6c48e 61 if (key != '\0') {
peps 0:aed236b6c48e 62 lcd.printf("%c", key);
peps 0:aed236b6c48e 63 } else {
peps 0:aed236b6c48e 64 lcd.printf("%c", ' ');
peps 0:aed236b6c48e 65 }
peps 0:aed236b6c48e 66 }
peps 0:aed236b6c48e 67 }