Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:aed236b6c48e, 2018-05-21 (annotated)
- Committer:
- peps
- Date:
- Mon May 21 21:59:31 2018 +0000
- Revision:
- 0:aed236b6c48e
- Child:
- 1:db0e3fb4d3c4
Keypad Library based on Fabio Dal Forno keyboard diagnostics program.
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 | 0:aed236b6c48e | 10 | TextLCD lcd(D2,D3,D4,D5,D6,D7); |
| peps | 0:aed236b6c48e | 11 | |
| peps | 0:aed236b6c48e | 12 | // Define your own keypad values |
| peps | 0:aed236b6c48e | 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 | 0:aed236b6c48e | 23 | for (int r = 0; r < 4; r++) { |
| peps | 0:aed236b6c48e | 24 | _rows[r]->write(1); |
| peps | 0:aed236b6c48e | 25 | for(int c = 0;c < 4 ;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 | 0:aed236b6c48e | 54 | lcd.printf("Clean"); |
| peps | 0:aed236b6c48e | 55 | |
| peps | 0:aed236b6c48e | 56 | init(); |
| peps | 0:aed236b6c48e | 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 | } |