
Programa que lee los caracteres de las teclas de un tecladp hexa mediante Thread. El programa principal solo hace parpadear un led. Se utiliza un LCD para ver los caracteres del teclado
Dependencies: mbed mbed-rtos TextLCD
main.cpp@1:91306627385c, 2018-12-20 (annotated)
- Committer:
- Otakutronics
- Date:
- Thu Dec 20 05:37:59 2018 +0000
- Revision:
- 1:91306627385c
- Parent:
- 0:8320db45d270
Manejo de teclado hexa mediante Thread con TextLCD
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Otakutronics | 0:8320db45d270 | 1 | #include "mbed.h" |
Otakutronics | 0:8320db45d270 | 2 | #include "rtos.h" |
Otakutronics | 0:8320db45d270 | 3 | #include "TextLCD.h" |
Otakutronics | 0:8320db45d270 | 4 | //<\> |
Otakutronics | 0:8320db45d270 | 5 | |
Otakutronics | 0:8320db45d270 | 6 | DigitalOut Fila1(PTD0,0); |
Otakutronics | 0:8320db45d270 | 7 | DigitalOut Fila2(PTD1,0); |
Otakutronics | 0:8320db45d270 | 8 | DigitalOut Fila3(PTD2,0); |
Otakutronics | 0:8320db45d270 | 9 | DigitalOut Fila4(PTD3,0); |
Otakutronics | 0:8320db45d270 | 10 | DigitalOut led1(LED_GREEN,1); |
Otakutronics | 0:8320db45d270 | 11 | DigitalOut relay(PTA2,0); |
Otakutronics | 0:8320db45d270 | 12 | |
Otakutronics | 0:8320db45d270 | 13 | InterruptIn Col1(PTC17); |
Otakutronics | 0:8320db45d270 | 14 | InterruptIn Col2(PTB9); |
Otakutronics | 0:8320db45d270 | 15 | InterruptIn Col3(PTA1); |
Otakutronics | 0:8320db45d270 | 16 | InterruptIn Col4(PTB23); |
Otakutronics | 0:8320db45d270 | 17 | |
Otakutronics | 0:8320db45d270 | 18 | TextLCD LCD(PTC2, PTC3, PTD0, PTD1, PTD2, PTD3); //rs, en, D4, D5, D6, D7 |
Otakutronics | 0:8320db45d270 | 19 | |
Otakutronics | 0:8320db45d270 | 20 | Thread *thread2; |
Otakutronics | 0:8320db45d270 | 21 | |
Otakutronics | 0:8320db45d270 | 22 | char password[10] = "6A1C8B2C"; |
Otakutronics | 0:8320db45d270 | 23 | char caracter = ' '; |
Otakutronics | 0:8320db45d270 | 24 | |
Otakutronics | 0:8320db45d270 | 25 | void Col1_press(void){ |
Otakutronics | 0:8320db45d270 | 26 | thread2->signal_set(0x1); |
Otakutronics | 0:8320db45d270 | 27 | } |
Otakutronics | 0:8320db45d270 | 28 | |
Otakutronics | 0:8320db45d270 | 29 | void Col2_press(void){ |
Otakutronics | 0:8320db45d270 | 30 | thread2->signal_set(0x1); |
Otakutronics | 0:8320db45d270 | 31 | } |
Otakutronics | 0:8320db45d270 | 32 | |
Otakutronics | 0:8320db45d270 | 33 | void Col3_press(void){ |
Otakutronics | 0:8320db45d270 | 34 | thread2->signal_set(0x1); |
Otakutronics | 0:8320db45d270 | 35 | } |
Otakutronics | 0:8320db45d270 | 36 | |
Otakutronics | 0:8320db45d270 | 37 | void Col4_press(void){ |
Otakutronics | 0:8320db45d270 | 38 | thread2->signal_set(0x1); |
Otakutronics | 0:8320db45d270 | 39 | } |
Otakutronics | 0:8320db45d270 | 40 | |
Otakutronics | 0:8320db45d270 | 41 | void leerTeclado(void const *argument) |
Otakutronics | 0:8320db45d270 | 42 | { |
Otakutronics | 0:8320db45d270 | 43 | while (true) |
Otakutronics | 0:8320db45d270 | 44 | { |
Otakutronics | 0:8320db45d270 | 45 | Fila1 = 0; |
Otakutronics | 0:8320db45d270 | 46 | Fila2 = 1; |
Otakutronics | 0:8320db45d270 | 47 | Fila3 = 1; |
Otakutronics | 0:8320db45d270 | 48 | Fila4 = 1; |
Otakutronics | 0:8320db45d270 | 49 | if (Col1==0){ caracter = '1'; |
Otakutronics | 0:8320db45d270 | 50 | goto final;} |
Otakutronics | 0:8320db45d270 | 51 | if (Col2==0){ caracter = '2'; |
Otakutronics | 0:8320db45d270 | 52 | goto final;} |
Otakutronics | 0:8320db45d270 | 53 | if (Col3==0){ caracter = '3'; |
Otakutronics | 0:8320db45d270 | 54 | goto final;} |
Otakutronics | 0:8320db45d270 | 55 | if (Col4==0){ caracter = 'C'; |
Otakutronics | 0:8320db45d270 | 56 | goto final;} |
Otakutronics | 0:8320db45d270 | 57 | Fila1 = 1; |
Otakutronics | 0:8320db45d270 | 58 | Fila2 = 0; |
Otakutronics | 0:8320db45d270 | 59 | Fila3 = 1; |
Otakutronics | 0:8320db45d270 | 60 | Fila4 = 1; |
Otakutronics | 0:8320db45d270 | 61 | if (Col1==0){ caracter = '4'; |
Otakutronics | 0:8320db45d270 | 62 | goto final;} |
Otakutronics | 0:8320db45d270 | 63 | if (Col2==0){ caracter = '5'; |
Otakutronics | 0:8320db45d270 | 64 | goto final;} |
Otakutronics | 0:8320db45d270 | 65 | if (Col3==0){ caracter = '6'; |
Otakutronics | 0:8320db45d270 | 66 | goto final;} |
Otakutronics | 0:8320db45d270 | 67 | if (Col4==0){ caracter = 'D'; |
Otakutronics | 0:8320db45d270 | 68 | goto final;} |
Otakutronics | 0:8320db45d270 | 69 | Fila1 = 1; |
Otakutronics | 0:8320db45d270 | 70 | Fila2 = 1; |
Otakutronics | 0:8320db45d270 | 71 | Fila3 = 0; |
Otakutronics | 0:8320db45d270 | 72 | Fila4 = 1; |
Otakutronics | 0:8320db45d270 | 73 | if (Col1==0){ caracter = '7'; |
Otakutronics | 0:8320db45d270 | 74 | goto final;} |
Otakutronics | 0:8320db45d270 | 75 | if (Col2==0){ caracter = '8'; |
Otakutronics | 0:8320db45d270 | 76 | goto final;} |
Otakutronics | 0:8320db45d270 | 77 | if (Col3==0){ caracter = '9'; |
Otakutronics | 0:8320db45d270 | 78 | goto final;} |
Otakutronics | 0:8320db45d270 | 79 | if (Col4==0){ caracter = 'E'; |
Otakutronics | 0:8320db45d270 | 80 | goto final;} |
Otakutronics | 0:8320db45d270 | 81 | led1 = 0; |
Otakutronics | 0:8320db45d270 | 82 | wait(0.02); |
Otakutronics | 0:8320db45d270 | 83 | led1 = 1; |
Otakutronics | 0:8320db45d270 | 84 | Fila1 = 1; |
Otakutronics | 0:8320db45d270 | 85 | Fila2 = 1; |
Otakutronics | 0:8320db45d270 | 86 | Fila3 = 1; |
Otakutronics | 0:8320db45d270 | 87 | Fila4 = 0; |
Otakutronics | 0:8320db45d270 | 88 | if (Col1==0){ caracter = 'A'; |
Otakutronics | 0:8320db45d270 | 89 | goto final;} |
Otakutronics | 0:8320db45d270 | 90 | if (Col2==0){ caracter = '0'; |
Otakutronics | 0:8320db45d270 | 91 | goto final;} |
Otakutronics | 0:8320db45d270 | 92 | if (Col3==0){ caracter = 'B'; |
Otakutronics | 0:8320db45d270 | 93 | goto final;} |
Otakutronics | 0:8320db45d270 | 94 | if (Col4==0){ caracter = 'F'; |
Otakutronics | 0:8320db45d270 | 95 | goto final;} |
Otakutronics | 0:8320db45d270 | 96 | final: Thread::wait(30); |
Otakutronics | 0:8320db45d270 | 97 | } |
Otakutronics | 0:8320db45d270 | 98 | } |
Otakutronics | 0:8320db45d270 | 99 | |
Otakutronics | 0:8320db45d270 | 100 | void terminar(void const *argument){ |
Otakutronics | 0:8320db45d270 | 101 | while (true){ |
Otakutronics | 0:8320db45d270 | 102 | Thread::signal_wait(0x1); |
Otakutronics | 0:8320db45d270 | 103 | LCD.locate(11,0); |
Otakutronics | 0:8320db45d270 | 104 | LCD.putc(caracter); |
Otakutronics | 0:8320db45d270 | 105 | Thread::wait(30); |
Otakutronics | 0:8320db45d270 | 106 | } |
Otakutronics | 0:8320db45d270 | 107 | } |
Otakutronics | 0:8320db45d270 | 108 | |
Otakutronics | 0:8320db45d270 | 109 | int main() |
Otakutronics | 0:8320db45d270 | 110 | { |
Otakutronics | 0:8320db45d270 | 111 | Thread tarea(leerTeclado); |
Otakutronics | 0:8320db45d270 | 112 | thread2 = new Thread(terminar); |
Otakutronics | 0:8320db45d270 | 113 | |
Otakutronics | 0:8320db45d270 | 114 | Col1.rise(&Col1_press); |
Otakutronics | 0:8320db45d270 | 115 | Col2.rise(&Col2_press); |
Otakutronics | 0:8320db45d270 | 116 | Col3.rise(&Col3_press); |
Otakutronics | 0:8320db45d270 | 117 | Col4.rise(&Col4_press); |
Otakutronics | 0:8320db45d270 | 118 | |
Otakutronics | 0:8320db45d270 | 119 | wait(0.25); |
Otakutronics | 0:8320db45d270 | 120 | LCD.cls(); |
Otakutronics | 0:8320db45d270 | 121 | LCD.locate(0,0); |
Otakutronics | 0:8320db45d270 | 122 | LCD.printf(" Caracter: "); |
Otakutronics | 0:8320db45d270 | 123 | wait(0.25); |
Otakutronics | 0:8320db45d270 | 124 | |
Otakutronics | 0:8320db45d270 | 125 | while(true) |
Otakutronics | 0:8320db45d270 | 126 | { |
Otakutronics | 0:8320db45d270 | 127 | Thread::wait(300); |
Otakutronics | 0:8320db45d270 | 128 | fflush(stdout); |
Otakutronics | 0:8320db45d270 | 129 | while (1){ |
Otakutronics | 0:8320db45d270 | 130 | relay = !relay; |
Otakutronics | 1:91306627385c | 131 | wait(0.6); |
Otakutronics | 0:8320db45d270 | 132 | } |
Otakutronics | 0:8320db45d270 | 133 | } |
Otakutronics | 0:8320db45d270 | 134 | } |