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

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?

UserRevisionLine numberNew 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 }