
Keypad library prototype
main.cpp@1:db0e3fb4d3c4, 2019-04-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |