Versión sin post-procesado del software del VmRideR

Dependencies:   mbed

Committer:
jjmedina
Date:
Mon Jun 15 15:44:11 2015 +0000
Revision:
1:a3c9b672b8e2
Parent:
0:3d456b8ce449
Prueba_deutsch

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JuanManuelAmador 0:3d456b8ce449 1 #include "mbed.h"
JuanManuelAmador 0:3d456b8ce449 2 #include "Teclado.h"
JuanManuelAmador 0:3d456b8ce449 3
JuanManuelAmador 0:3d456b8ce449 4 extern ScreenManager SC;
JuanManuelAmador 0:3d456b8ce449 5
JuanManuelAmador 0:3d456b8ce449 6 extern DigitalIn boton1;
JuanManuelAmador 0:3d456b8ce449 7 extern DigitalIn boton2;
JuanManuelAmador 0:3d456b8ce449 8 extern DigitalIn boton3;
JuanManuelAmador 0:3d456b8ce449 9 extern DigitalIn boton4;
JuanManuelAmador 0:3d456b8ce449 10 extern DigitalIn boton5;
JuanManuelAmador 0:3d456b8ce449 11
JuanManuelAmador 0:3d456b8ce449 12 extern DigitalOut myled;
JuanManuelAmador 0:3d456b8ce449 13
JuanManuelAmador 0:3d456b8ce449 14 void Teclado::initialize(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 15 // Se inicializa la variable que guarda el último nombre introducido
JuanManuelAmador 0:3d456b8ce449 16 for(int i = 0; i < MAXCARACTERESESCRITURA; i++){
JuanManuelAmador 0:3d456b8ce449 17 nombre[i] = 0;
JuanManuelAmador 0:3d456b8ce449 18 }
JuanManuelAmador 0:3d456b8ce449 19
JuanManuelAmador 0:3d456b8ce449 20 // Se inicializa la selección
JuanManuelAmador 0:3d456b8ce449 21 setSelect(0);
JuanManuelAmador 0:3d456b8ce449 22
JuanManuelAmador 0:3d456b8ce449 23 indiceEscritura = 0;
JuanManuelAmador 0:3d456b8ce449 24
JuanManuelAmador 0:3d456b8ce449 25 mostrarRecuadro(lcd);
JuanManuelAmador 0:3d456b8ce449 26
JuanManuelAmador 0:3d456b8ce449 27 // Por defecto se muestran caracteres de letras minusculas
JuanManuelAmador 0:3d456b8ce449 28 asignarMinusculas();
JuanManuelAmador 0:3d456b8ce449 29 ifMayus = false;
JuanManuelAmador 0:3d456b8ce449 30
JuanManuelAmador 0:3d456b8ce449 31 // Se muestran los caracteres normales
JuanManuelAmador 0:3d456b8ce449 32 mostrarCaracteres(lcd);
JuanManuelAmador 0:3d456b8ce449 33
JuanManuelAmador 0:3d456b8ce449 34 // Se muestran los caracteres especiales
JuanManuelAmador 0:3d456b8ce449 35 mostrarEspeciales(lcd);
JuanManuelAmador 0:3d456b8ce449 36
JuanManuelAmador 0:3d456b8ce449 37 // Se inicializa la selección
JuanManuelAmador 0:3d456b8ce449 38 Xsel = 0;
JuanManuelAmador 0:3d456b8ce449 39 Ysel = 0;
JuanManuelAmador 0:3d456b8ce449 40 lastXsel = 0;
JuanManuelAmador 0:3d456b8ce449 41 lastYsel = 0;
JuanManuelAmador 0:3d456b8ce449 42 // Se pinta la selección por defecto
JuanManuelAmador 0:3d456b8ce449 43 drawSelection(OFFSETX-2, WRITTENSPACE, CARACTER11, CARACTER11, lcd);
JuanManuelAmador 0:3d456b8ce449 44
JuanManuelAmador 0:3d456b8ce449 45 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 46 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 47
JuanManuelAmador 0:3d456b8ce449 48 }
JuanManuelAmador 0:3d456b8ce449 49
JuanManuelAmador 0:3d456b8ce449 50 // El botón 5 envía a la pantalla correspondiente según el elemento seleccionado
JuanManuelAmador 0:3d456b8ce449 51 void Teclado::button5pressed(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 52
JuanManuelAmador 0:3d456b8ce449 53 // Si no es una tecla especial
JuanManuelAmador 0:3d456b8ce449 54 if(m[Ysel][Xsel] > ULTIMOCARACTERESPECIAL){
JuanManuelAmador 0:3d456b8ce449 55 // select font to use:
JuanManuelAmador 0:3d456b8ce449 56 lcd->XFont = xfont_8;
JuanManuelAmador 0:3d456b8ce449 57 if(indiceEscritura < MAXCARACTERESESCRITURA){
JuanManuelAmador 0:3d456b8ce449 58 // Si se ha pulsado sobre un caracter normal se añade este al recuadro donde se muestra lo escrito
JuanManuelAmador 0:3d456b8ce449 59 if(m[Ysel][Xsel] > ULTIMOCARACTERESPECIAL){ // Si el elemento no es un caracter o tecla especial
JuanManuelAmador 0:3d456b8ce449 60 // Se asigna el caracter en la cedena
JuanManuelAmador 0:3d456b8ce449 61 nombre[indiceEscritura] = m[Ysel][Xsel];
JuanManuelAmador 0:3d456b8ce449 62 indiceEscritura++;
JuanManuelAmador 0:3d456b8ce449 63 // Se actualiza el caracter finde cadena
JuanManuelAmador 0:3d456b8ce449 64 if(indiceEscritura < MAXCARACTERESESCRITURA){
JuanManuelAmador 0:3d456b8ce449 65 nombre[indiceEscritura] = '\0';
JuanManuelAmador 0:3d456b8ce449 66 }
JuanManuelAmador 0:3d456b8ce449 67
JuanManuelAmador 0:3d456b8ce449 68 // Se borra la cadena mostrada actualmente
JuanManuelAmador 0:3d456b8ce449 69 lcd->Rect(POSCADENAX,1,WIDTH-2, WRITTENSPACE-2, DOGMLCD_full, wipe);
JuanManuelAmador 0:3d456b8ce449 70
JuanManuelAmador 0:3d456b8ce449 71 // Se escribe la nueva cadena
JuanManuelAmador 0:3d456b8ce449 72 lcd->XString(POSCADENAX, 1, nombre);
JuanManuelAmador 0:3d456b8ce449 73 }
JuanManuelAmador 0:3d456b8ce449 74 }
JuanManuelAmador 0:3d456b8ce449 75 }else{ // Teclas especiales
JuanManuelAmador 0:3d456b8ce449 76 if(m[Ysel][Xsel] == SPACEBAR){ // Barra espaciadora
JuanManuelAmador 0:3d456b8ce449 77 // Se aplica un espacio
JuanManuelAmador 0:3d456b8ce449 78 nombre[indiceEscritura] = ' ';
JuanManuelAmador 0:3d456b8ce449 79 indiceEscritura++;
JuanManuelAmador 0:3d456b8ce449 80 // Se actualiza el caracter fin de cadena
JuanManuelAmador 0:3d456b8ce449 81 if(indiceEscritura < MAXCARACTERESESCRITURA){
JuanManuelAmador 0:3d456b8ce449 82 nombre[indiceEscritura] = '\0';
JuanManuelAmador 0:3d456b8ce449 83 }
JuanManuelAmador 0:3d456b8ce449 84 }else if(m[Ysel][Xsel] == MAYUS){
JuanManuelAmador 0:3d456b8ce449 85 // Se intercambian los caracteres actuales mayúsculas/minúculas
JuanManuelAmador 0:3d456b8ce449 86 // Primero se limpia la pantalla
JuanManuelAmador 0:3d456b8ce449 87 lcd->Clear();
JuanManuelAmador 0:3d456b8ce449 88 mostrarRecuadro(lcd);
JuanManuelAmador 0:3d456b8ce449 89 // Se asignan los caracteres que corresponden
JuanManuelAmador 0:3d456b8ce449 90 if(ifMayus){
JuanManuelAmador 0:3d456b8ce449 91 asignarMinusculas();
JuanManuelAmador 0:3d456b8ce449 92 ifMayus = false;
JuanManuelAmador 0:3d456b8ce449 93 }else{
JuanManuelAmador 0:3d456b8ce449 94 asignarMayusculas();
JuanManuelAmador 0:3d456b8ce449 95 ifMayus = true;
JuanManuelAmador 0:3d456b8ce449 96 }
JuanManuelAmador 0:3d456b8ce449 97 // Se muestran los caracteres normales
JuanManuelAmador 0:3d456b8ce449 98 mostrarCaracteres(lcd);
JuanManuelAmador 0:3d456b8ce449 99
JuanManuelAmador 0:3d456b8ce449 100 // Se muestran los caracteres especiales
JuanManuelAmador 0:3d456b8ce449 101 mostrarEspeciales(lcd);
JuanManuelAmador 0:3d456b8ce449 102
JuanManuelAmador 0:3d456b8ce449 103 // Se escribe la selección del mayus
JuanManuelAmador 0:3d456b8ce449 104 drawSelection(OFFSETX-2 + Xsel*CARACTER11, WRITTENSPACE + Ysel*CARACTER11, CARACTER11, CARACTER11-1, lcd);
JuanManuelAmador 0:3d456b8ce449 105
JuanManuelAmador 0:3d456b8ce449 106 // select font to use:
JuanManuelAmador 0:3d456b8ce449 107 lcd->XFont = xfont_8;
JuanManuelAmador 0:3d456b8ce449 108
JuanManuelAmador 0:3d456b8ce449 109 // Se escribe la nueva cadena
JuanManuelAmador 0:3d456b8ce449 110 lcd->XString(POSCADENAX, 1, nombre);
JuanManuelAmador 0:3d456b8ce449 111
JuanManuelAmador 0:3d456b8ce449 112 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 113 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 114 }else if(m[Ysel][Xsel] == BACK){
JuanManuelAmador 0:3d456b8ce449 115 // Se borra el último caracter de la cadena escribiendo en su lugar un caracter fin de cadena
JuanManuelAmador 0:3d456b8ce449 116 if(indiceEscritura > 0){ // Si hay algo que borrar
JuanManuelAmador 0:3d456b8ce449 117 indiceEscritura--;
JuanManuelAmador 0:3d456b8ce449 118 nombre[indiceEscritura] = '\0';
JuanManuelAmador 0:3d456b8ce449 119
JuanManuelAmador 0:3d456b8ce449 120 // Se borra la cadena mostrada actualmente
JuanManuelAmador 0:3d456b8ce449 121 lcd->Rect(POSCADENAX,1,WIDTH-2, WRITTENSPACE-2, DOGMLCD_full, wipe);
JuanManuelAmador 0:3d456b8ce449 122
JuanManuelAmador 0:3d456b8ce449 123 // Se escribe la nueva cadena
JuanManuelAmador 0:3d456b8ce449 124 lcd->XString(POSCADENAX, 1, nombre);
JuanManuelAmador 0:3d456b8ce449 125 }
JuanManuelAmador 0:3d456b8ce449 126 }else if(m[Ysel][Xsel] == APLICAR){
JuanManuelAmador 0:3d456b8ce449 127 SC.changeScreen(nameNextScreen);
JuanManuelAmador 0:3d456b8ce449 128 }
JuanManuelAmador 0:3d456b8ce449 129 }
JuanManuelAmador 0:3d456b8ce449 130
JuanManuelAmador 0:3d456b8ce449 131 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 132 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 133 }
JuanManuelAmador 0:3d456b8ce449 134
JuanManuelAmador 0:3d456b8ce449 135 void Teclado::mostrarEspeciales(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 136 // Se pinta la flecha de borrado de caracteres
JuanManuelAmador 0:3d456b8ce449 137 lcd->Rect(OFFSETX + CARACTER11*10 + 2, WRITTENSPACE + CARACTER11*3 + 3, OFFSETX + CARACTER11*10 + 2 + 6, WRITTENSPACE + CARACTER11*3 + 3 + 5);
JuanManuelAmador 0:3d456b8ce449 138 lcd->LineV(OFFSETX + CARACTER11*10 + 1, WRITTENSPACE + CARACTER11*3 + 4, WRITTENSPACE + CARACTER11*3 + 7);
JuanManuelAmador 0:3d456b8ce449 139 lcd->LineV(OFFSETX + CARACTER11*10, WRITTENSPACE + CARACTER11*3 + 5, WRITTENSPACE + CARACTER11*3 + 6);
JuanManuelAmador 0:3d456b8ce449 140
JuanManuelAmador 0:3d456b8ce449 141 // Se pinta la flecha de mayus
JuanManuelAmador 0:3d456b8ce449 142 lcd->Rect(OFFSETX + 2, WRITTENSPACE + CARACTER11*4 + 5, OFFSETX + 2 + 3, WRITTENSPACE + CARACTER11*4 + 5 + 4);
JuanManuelAmador 0:3d456b8ce449 143 lcd->LineH(OFFSETX + 1, WRITTENSPACE + CARACTER11*4 + 4, OFFSETX + 1 + 5);
JuanManuelAmador 0:3d456b8ce449 144 lcd->LineH(OFFSETX + 2, WRITTENSPACE + CARACTER11*4 + 3, OFFSETX + 2 + 3);
JuanManuelAmador 0:3d456b8ce449 145 lcd->LineH(OFFSETX + 3, WRITTENSPACE + CARACTER11*4 + 2, OFFSETX + 3 + 1);
JuanManuelAmador 0:3d456b8ce449 146
JuanManuelAmador 0:3d456b8ce449 147 // Se pinta el intro (abarca el espacio de dos elementos de la matriz)
JuanManuelAmador 0:3d456b8ce449 148 lcd->Rect(OFFSETX + CARACTER11*10 + 5, WRITTENSPACE + CARACTER11*4 + 1, OFFSETX + CARACTER11*10 + 5 + 2, WRITTENSPACE + CARACTER11*4 + 5);
JuanManuelAmador 0:3d456b8ce449 149 lcd->Rect(OFFSETX + CARACTER11*9 + 3, WRITTENSPACE + CARACTER11*4 + 6, OFFSETX + CARACTER11*9 + 3 + 15, WRITTENSPACE + CARACTER11*4 + 6 + 2);
JuanManuelAmador 0:3d456b8ce449 150 lcd->LineV(OFFSETX + CARACTER11*9 + 2, WRITTENSPACE + CARACTER11*4 + 5, WRITTENSPACE + CARACTER11*4 + 5 + 4);
JuanManuelAmador 0:3d456b8ce449 151 lcd->LineV(OFFSETX + CARACTER11*9 + 1, WRITTENSPACE + CARACTER11*4 + 6, WRITTENSPACE + CARACTER11*4 + 6 + 2);
JuanManuelAmador 0:3d456b8ce449 152 lcd->LineV(OFFSETX + CARACTER11*9 , WRITTENSPACE + CARACTER11*4 + 7, WRITTENSPACE + CARACTER11*4 + 7);
JuanManuelAmador 0:3d456b8ce449 153
JuanManuelAmador 0:3d456b8ce449 154 // Se pinta la barra espaciadora (abarca el espacio de 8 elementos de la matriz)
JuanManuelAmador 0:3d456b8ce449 155 lcd->Rect(OFFSETX + CARACTER11 + 3, WRITTENSPACE + CARACTER11*4 + 6, OFFSETX + CARACTER11 + 79, WRITTENSPACE + CARACTER11*4 + 6 + 1);
JuanManuelAmador 0:3d456b8ce449 156 lcd->Rect(OFFSETX + CARACTER11 + 3, WRITTENSPACE + CARACTER11*4 + 2, OFFSETX + CARACTER11 + 3 + 1, WRITTENSPACE + CARACTER11*4 + 2 + 3);
JuanManuelAmador 0:3d456b8ce449 157 lcd->Rect(OFFSETX + CARACTER11 + 78, WRITTENSPACE + CARACTER11*4 + 2, OFFSETX + CARACTER11 + 79, WRITTENSPACE + CARACTER11*4 + 2 + 3);
JuanManuelAmador 0:3d456b8ce449 158 }
JuanManuelAmador 0:3d456b8ce449 159
JuanManuelAmador 0:3d456b8ce449 160 void Teclado::seleccionarAplicar(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 161 drawSelection(OFFSETX + CARACTER11 + 84, WRITTENSPACE + CARACTER11*4, 24, 10, lcd);
JuanManuelAmador 0:3d456b8ce449 162 }
JuanManuelAmador 0:3d456b8ce449 163
JuanManuelAmador 0:3d456b8ce449 164 void Teclado::deseleccionarAplicar(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 165 drawDeselection(OFFSETX + CARACTER11 + 84, WRITTENSPACE + CARACTER11*4, 24, 10, lcd);
JuanManuelAmador 0:3d456b8ce449 166 }
JuanManuelAmador 0:3d456b8ce449 167
JuanManuelAmador 0:3d456b8ce449 168 void Teclado::seleccionarBarraEspaciadora(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 169 drawSelection(OFFSETX + CARACTER11 - 1, WRITTENSPACE + CARACTER11*4, 84, 10, lcd);
JuanManuelAmador 0:3d456b8ce449 170 }
JuanManuelAmador 0:3d456b8ce449 171
JuanManuelAmador 0:3d456b8ce449 172 void Teclado::deseleccionarBarraEspaciadora(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 173 drawDeselection(OFFSETX + CARACTER11 - 1, WRITTENSPACE + CARACTER11*4, 84, 10, lcd);
JuanManuelAmador 0:3d456b8ce449 174 }
JuanManuelAmador 0:3d456b8ce449 175
JuanManuelAmador 0:3d456b8ce449 176 void Teclado::mostrarCaracteres(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 177 // select font to use:
JuanManuelAmador 0:3d456b8ce449 178 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 179
JuanManuelAmador 0:3d456b8ce449 180 // Se recorre la matriz mostrando todo lo que no sean caracteres o teclas especiales
JuanManuelAmador 0:3d456b8ce449 181 for(int i = 0; i < FILASMATRIZ; i++){
JuanManuelAmador 0:3d456b8ce449 182 for(int j = 0; j < COLUMNASMATRIZ; j++){
JuanManuelAmador 0:3d456b8ce449 183 if(m[i][j] > ULTIMOCARACTERESPECIAL){ // SI el elemento no es un caracter o tecla especial
JuanManuelAmador 0:3d456b8ce449 184 // se muestra
JuanManuelAmador 0:3d456b8ce449 185 lcd->XChar(OFFSETX + CARACTER11*j, WRITTENSPACE + CARACTER11*i, m[i][j]);
JuanManuelAmador 0:3d456b8ce449 186 }
JuanManuelAmador 0:3d456b8ce449 187 }
JuanManuelAmador 0:3d456b8ce449 188 }
JuanManuelAmador 0:3d456b8ce449 189 }
JuanManuelAmador 0:3d456b8ce449 190
JuanManuelAmador 0:3d456b8ce449 191 void Teclado::mostrarRecuadro(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 192 lcd->Frame(0, 0,WIDTH-1, WRITTENSPACE-1);
JuanManuelAmador 0:3d456b8ce449 193 }
JuanManuelAmador 0:3d456b8ce449 194
JuanManuelAmador 0:3d456b8ce449 195 // El botón 1 sube la selección al elemento superior al actual
JuanManuelAmador 0:3d456b8ce449 196 void Teclado::button1pressed(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 197 // Si sales de los elementos seleccionables no se cambia de selección
JuanManuelAmador 0:3d456b8ce449 198 if((Ysel - 1) >= 0){
JuanManuelAmador 0:3d456b8ce449 199 // Si se venía de la última fila (teclas especiales)
JuanManuelAmador 0:3d456b8ce449 200 if(Ysel == (FILASMATRIZ-1) ){
JuanManuelAmador 0:3d456b8ce449 201 // Si se venía la barra espaciadora se selecciona esta
JuanManuelAmador 0:3d456b8ce449 202 if(m[Ysel][Xsel] == SPACEBAR){
JuanManuelAmador 0:3d456b8ce449 203 deseleccionarBarraEspaciadora(lcd);
JuanManuelAmador 0:3d456b8ce449 204 }else if(m[Ysel][Xsel] == APLICAR){ // Si se venía de la tecla aplicar se selecciona esta
JuanManuelAmador 0:3d456b8ce449 205 deseleccionarAplicar(lcd);
JuanManuelAmador 0:3d456b8ce449 206 }else{
JuanManuelAmador 0:3d456b8ce449 207 // se venía del mayus mayus
JuanManuelAmador 0:3d456b8ce449 208 drawDeselection(OFFSETX-2 + Xsel*CARACTER11, WRITTENSPACE + Ysel*CARACTER11, CARACTER11, CARACTER11-1, lcd);
JuanManuelAmador 0:3d456b8ce449 209 }
JuanManuelAmador 0:3d456b8ce449 210 }else{
JuanManuelAmador 0:3d456b8ce449 211 // Se deselecciona la tecla anterior
JuanManuelAmador 0:3d456b8ce449 212 drawDeselection(OFFSETX-2 + Xsel*CARACTER11, WRITTENSPACE + Ysel*CARACTER11, CARACTER11, CARACTER11, lcd);
JuanManuelAmador 0:3d456b8ce449 213 }
JuanManuelAmador 0:3d456b8ce449 214
JuanManuelAmador 0:3d456b8ce449 215 // Se selecciona el nuevo elemento
JuanManuelAmador 0:3d456b8ce449 216 Ysel--;
JuanManuelAmador 0:3d456b8ce449 217
JuanManuelAmador 0:3d456b8ce449 218 // Se escribe la nueva selección
JuanManuelAmador 0:3d456b8ce449 219 drawSelection(OFFSETX-2 + Xsel*CARACTER11, WRITTENSPACE + Ysel*CARACTER11, CARACTER11, CARACTER11, lcd);
JuanManuelAmador 0:3d456b8ce449 220
JuanManuelAmador 0:3d456b8ce449 221 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 222 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 223 }
JuanManuelAmador 0:3d456b8ce449 224 }
JuanManuelAmador 0:3d456b8ce449 225
JuanManuelAmador 0:3d456b8ce449 226 // El botón 2 desplaza la selección al elemento izquierdo al actual
JuanManuelAmador 0:3d456b8ce449 227 void Teclado::button2pressed(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 228 // Si sales de los elementos seleccionables no se cambia de selección
JuanManuelAmador 0:3d456b8ce449 229 if((Xsel - 1) >= 0){
JuanManuelAmador 0:3d456b8ce449 230 // Si se está en la última fila
JuanManuelAmador 0:3d456b8ce449 231 if(Ysel == (FILASMATRIZ-1) ){
JuanManuelAmador 0:3d456b8ce449 232 // Se se venía de la tecla aplicar
JuanManuelAmador 0:3d456b8ce449 233 if(m[Ysel][Xsel] == APLICAR){
JuanManuelAmador 0:3d456b8ce449 234 deseleccionarAplicar(lcd);
JuanManuelAmador 0:3d456b8ce449 235 seleccionarBarraEspaciadora(lcd);
JuanManuelAmador 0:3d456b8ce449 236 // Se mueven dos elementos a la izquierda
JuanManuelAmador 0:3d456b8ce449 237 Xsel -= 2;
JuanManuelAmador 0:3d456b8ce449 238 }else{
JuanManuelAmador 0:3d456b8ce449 239 deseleccionarBarraEspaciadora(lcd);
JuanManuelAmador 0:3d456b8ce449 240 // Se mueve la selección al elemento de la izquierda
JuanManuelAmador 0:3d456b8ce449 241 Xsel = 0;
JuanManuelAmador 0:3d456b8ce449 242 // Se escribe la nueva selección (la selección es CARACTER11-1 por razones de espacio) (tecla mayus)
JuanManuelAmador 0:3d456b8ce449 243 drawSelection(OFFSETX-2 + Xsel*CARACTER11, WRITTENSPACE + Ysel*CARACTER11, CARACTER11, CARACTER11-1, lcd);
JuanManuelAmador 0:3d456b8ce449 244 }
JuanManuelAmador 0:3d456b8ce449 245 }else{
JuanManuelAmador 0:3d456b8ce449 246 // Se borra la selección anterior
JuanManuelAmador 0:3d456b8ce449 247 drawDeselection(OFFSETX-2 + Xsel*CARACTER11, WRITTENSPACE + Ysel*CARACTER11, CARACTER11, CARACTER11, lcd);
JuanManuelAmador 0:3d456b8ce449 248 // Se selecciona el nuevo elemento
JuanManuelAmador 0:3d456b8ce449 249 Xsel--;
JuanManuelAmador 0:3d456b8ce449 250 // Se escribe la nueva selección
JuanManuelAmador 0:3d456b8ce449 251 drawSelection(OFFSETX-2 + Xsel*CARACTER11, WRITTENSPACE + Ysel*CARACTER11, CARACTER11, CARACTER11, lcd);
JuanManuelAmador 0:3d456b8ce449 252 }
JuanManuelAmador 0:3d456b8ce449 253 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 254 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 255 }
JuanManuelAmador 0:3d456b8ce449 256 }
JuanManuelAmador 0:3d456b8ce449 257
JuanManuelAmador 0:3d456b8ce449 258 // El botón 3 desplaza la selección al elemento derecho al actual
JuanManuelAmador 0:3d456b8ce449 259 void Teclado::button3pressed(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 260 // Si sales de los elementos seleccionables no se cambia de selección
JuanManuelAmador 0:3d456b8ce449 261 if((Xsel + 1) < COLUMNASMATRIZ){
JuanManuelAmador 0:3d456b8ce449 262 // Si se está en la última fila
JuanManuelAmador 0:3d456b8ce449 263 if(Ysel == (FILASMATRIZ-1) ){
JuanManuelAmador 0:3d456b8ce449 264 // Se se venía de la tecla mayus
JuanManuelAmador 0:3d456b8ce449 265 if(m[Ysel][Xsel] == MAYUS){
JuanManuelAmador 0:3d456b8ce449 266 drawDeselection(OFFSETX-2 + Xsel*CARACTER11, WRITTENSPACE + Ysel*CARACTER11, CARACTER11, CARACTER11-1, lcd);
JuanManuelAmador 0:3d456b8ce449 267 seleccionarBarraEspaciadora(lcd);
JuanManuelAmador 0:3d456b8ce449 268 // Se mueven un elemento a la derecha
JuanManuelAmador 0:3d456b8ce449 269 Xsel++;
JuanManuelAmador 0:3d456b8ce449 270 }else if(m[Ysel][Xsel] == SPACEBAR){ //si se venía de la barra espaciadora
JuanManuelAmador 0:3d456b8ce449 271 deseleccionarBarraEspaciadora(lcd);
JuanManuelAmador 0:3d456b8ce449 272 // Se mueve la selección al penultimo elemento
JuanManuelAmador 0:3d456b8ce449 273 Xsel = 9;
JuanManuelAmador 0:3d456b8ce449 274 // Se escribe la nueva selección (la selección es CARACTER11-1 por razones de espacio) (tecla mayus)
JuanManuelAmador 0:3d456b8ce449 275 seleccionarAplicar(lcd);
JuanManuelAmador 0:3d456b8ce449 276 }
JuanManuelAmador 0:3d456b8ce449 277 }else{
JuanManuelAmador 0:3d456b8ce449 278 // Se borra la selección anterior
JuanManuelAmador 0:3d456b8ce449 279 drawDeselection(OFFSETX-2 + Xsel*CARACTER11, WRITTENSPACE + Ysel*CARACTER11, CARACTER11, CARACTER11, lcd);
JuanManuelAmador 0:3d456b8ce449 280 // Se selecciona el nuevo elemento
JuanManuelAmador 0:3d456b8ce449 281 Xsel++;
JuanManuelAmador 0:3d456b8ce449 282 // Se escribe la nueva selección
JuanManuelAmador 0:3d456b8ce449 283 drawSelection(OFFSETX-2 + Xsel*CARACTER11, WRITTENSPACE + Ysel*CARACTER11, CARACTER11, CARACTER11, lcd);
JuanManuelAmador 0:3d456b8ce449 284 }
JuanManuelAmador 0:3d456b8ce449 285
JuanManuelAmador 0:3d456b8ce449 286 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 287 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 288 }
JuanManuelAmador 0:3d456b8ce449 289 }
JuanManuelAmador 0:3d456b8ce449 290
JuanManuelAmador 0:3d456b8ce449 291 // El botón 4 baja la selección al elemento superior al actual
JuanManuelAmador 0:3d456b8ce449 292 void Teclado::button4pressed(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 293 // Si sales de los elementos seleccionables no se cambia de selección
JuanManuelAmador 0:3d456b8ce449 294 if((Ysel + 1) < FILASMATRIZ){
JuanManuelAmador 0:3d456b8ce449 295 // Se borra la selección anterior
JuanManuelAmador 0:3d456b8ce449 296 drawDeselection(OFFSETX-2 + Xsel*CARACTER11, WRITTENSPACE + Ysel*CARACTER11, CARACTER11, CARACTER11, lcd);
JuanManuelAmador 0:3d456b8ce449 297 // Se selecciona el nuevo elemento
JuanManuelAmador 0:3d456b8ce449 298 Ysel++;
JuanManuelAmador 0:3d456b8ce449 299
JuanManuelAmador 0:3d456b8ce449 300 // Si la siguiente fila es la última (teclas especiales)
JuanManuelAmador 0:3d456b8ce449 301 if(Ysel == (FILASMATRIZ-1) ){
JuanManuelAmador 0:3d456b8ce449 302 // Se guarda la última tecla que estaba seleccionada
JuanManuelAmador 0:3d456b8ce449 303 lastXsel = Xsel;
JuanManuelAmador 0:3d456b8ce449 304 lastYsel = Ysel-1;
JuanManuelAmador 0:3d456b8ce449 305 // Si se va hacia la barra espaciadora se selecciona esta
JuanManuelAmador 0:3d456b8ce449 306 if(m[Ysel][Xsel] == SPACEBAR){
JuanManuelAmador 0:3d456b8ce449 307 seleccionarBarraEspaciadora(lcd);
JuanManuelAmador 0:3d456b8ce449 308 }else if(m[Ysel][Xsel] == APLICAR){ // Si se va hacia la tecla aplicar se selecciona esta
JuanManuelAmador 0:3d456b8ce449 309 seleccionarAplicar(lcd);
JuanManuelAmador 0:3d456b8ce449 310 }else{
JuanManuelAmador 0:3d456b8ce449 311 // Se escribe la nueva selección (la selección es CARACTER11-1 por razones de espacio) (tecla mayus)
JuanManuelAmador 0:3d456b8ce449 312 drawSelection(OFFSETX-2 + Xsel*CARACTER11, WRITTENSPACE + Ysel*CARACTER11, CARACTER11, CARACTER11-1, lcd);
JuanManuelAmador 0:3d456b8ce449 313 }
JuanManuelAmador 0:3d456b8ce449 314 }else{
JuanManuelAmador 0:3d456b8ce449 315 // Se escribe la nueva selección
JuanManuelAmador 0:3d456b8ce449 316 drawSelection(OFFSETX-2 + Xsel*CARACTER11, WRITTENSPACE + Ysel*CARACTER11, CARACTER11, CARACTER11, lcd);
JuanManuelAmador 0:3d456b8ce449 317 }
JuanManuelAmador 0:3d456b8ce449 318
JuanManuelAmador 0:3d456b8ce449 319 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 320 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 321 }
JuanManuelAmador 0:3d456b8ce449 322 }
JuanManuelAmador 0:3d456b8ce449 323
JuanManuelAmador 0:3d456b8ce449 324 char *Teclado::getNombre(){
JuanManuelAmador 0:3d456b8ce449 325 return nombre;
JuanManuelAmador 0:3d456b8ce449 326 }
JuanManuelAmador 0:3d456b8ce449 327
JuanManuelAmador 0:3d456b8ce449 328 // Esta función guarda la pantalla a la que se debe volver en caso de ser pulsado el boton atras
JuanManuelAmador 0:3d456b8ce449 329 void Teclado::setNextScreen(char nameScreen[NCARSCREEN]){
JuanManuelAmador 0:3d456b8ce449 330 strcpy(nameNextScreen, nameScreen);
JuanManuelAmador 0:3d456b8ce449 331 }
JuanManuelAmador 0:3d456b8ce449 332
JuanManuelAmador 0:3d456b8ce449 333 void Teclado::asignarMinusculas(){
JuanManuelAmador 0:3d456b8ce449 334 // Primera fila
JuanManuelAmador 0:3d456b8ce449 335 m[0][0] = 'q';
JuanManuelAmador 0:3d456b8ce449 336 m[0][1] = 'w';
JuanManuelAmador 0:3d456b8ce449 337 m[0][2] = 'e';
JuanManuelAmador 0:3d456b8ce449 338 m[0][3] = 'r';
JuanManuelAmador 0:3d456b8ce449 339 m[0][4] = 't';
JuanManuelAmador 0:3d456b8ce449 340 m[0][5] = 'y';
JuanManuelAmador 0:3d456b8ce449 341 m[0][6] = 'u';
JuanManuelAmador 0:3d456b8ce449 342 m[0][7] = 'i';
JuanManuelAmador 0:3d456b8ce449 343 m[0][8] = 'o';
JuanManuelAmador 0:3d456b8ce449 344 m[0][9] = 'p';
JuanManuelAmador 0:3d456b8ce449 345 m[0][10] = '(';
JuanManuelAmador 0:3d456b8ce449 346
JuanManuelAmador 0:3d456b8ce449 347 // Segunda fila
JuanManuelAmador 0:3d456b8ce449 348 m[1][0] = 'a';
JuanManuelAmador 0:3d456b8ce449 349 m[1][1] = 's';
JuanManuelAmador 0:3d456b8ce449 350 m[1][2] = 'd';
JuanManuelAmador 0:3d456b8ce449 351 m[1][3] = 'f';
JuanManuelAmador 0:3d456b8ce449 352 m[1][4] = 'g';
JuanManuelAmador 0:3d456b8ce449 353 m[1][5] = 'h';
JuanManuelAmador 0:3d456b8ce449 354 m[1][6] = 'j';
JuanManuelAmador 0:3d456b8ce449 355 m[1][7] = 'k';
JuanManuelAmador 0:3d456b8ce449 356 m[1][8] = 'l';
JuanManuelAmador 0:3d456b8ce449 357 m[1][9] = 164;
JuanManuelAmador 0:3d456b8ce449 358 m[1][10] = ')';
JuanManuelAmador 0:3d456b8ce449 359
JuanManuelAmador 0:3d456b8ce449 360 // Tercera fila
JuanManuelAmador 0:3d456b8ce449 361 m[2][0] = 'z';
JuanManuelAmador 0:3d456b8ce449 362 m[2][1] = 'x';
JuanManuelAmador 0:3d456b8ce449 363 m[2][2] = 'c';
JuanManuelAmador 0:3d456b8ce449 364 m[2][3] = 'v';
JuanManuelAmador 0:3d456b8ce449 365 m[2][4] = 'b';
JuanManuelAmador 0:3d456b8ce449 366 m[2][5] = 'n';
JuanManuelAmador 0:3d456b8ce449 367 m[2][6] = 'm';
JuanManuelAmador 0:3d456b8ce449 368 m[2][7] = ',';
JuanManuelAmador 0:3d456b8ce449 369 m[2][8] = '.';
JuanManuelAmador 0:3d456b8ce449 370 m[2][9] = ';';
JuanManuelAmador 0:3d456b8ce449 371 m[2][10] = '_';
JuanManuelAmador 0:3d456b8ce449 372
JuanManuelAmador 0:3d456b8ce449 373 // Cuarta fila
JuanManuelAmador 0:3d456b8ce449 374 m[3][0] = '1';
JuanManuelAmador 0:3d456b8ce449 375 m[3][1] = '2';
JuanManuelAmador 0:3d456b8ce449 376 m[3][2] = '3';
JuanManuelAmador 0:3d456b8ce449 377 m[3][3] = '4';
JuanManuelAmador 0:3d456b8ce449 378 m[3][4] = '5';
JuanManuelAmador 0:3d456b8ce449 379 m[3][5] = '6';
JuanManuelAmador 0:3d456b8ce449 380 m[3][6] = '7';
JuanManuelAmador 0:3d456b8ce449 381 m[3][7] = '8';
JuanManuelAmador 0:3d456b8ce449 382 m[3][8] = '9';
JuanManuelAmador 0:3d456b8ce449 383 m[3][9] = '0';
JuanManuelAmador 0:3d456b8ce449 384 m[3][10] = BACK;
JuanManuelAmador 0:3d456b8ce449 385
JuanManuelAmador 0:3d456b8ce449 386 // Quinta fila
JuanManuelAmador 0:3d456b8ce449 387 m[4][0] = MAYUS;
JuanManuelAmador 0:3d456b8ce449 388 m[4][1] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 389 m[4][2] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 390 m[4][3] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 391 m[4][4] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 392 m[4][5] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 393 m[4][6] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 394 m[4][7] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 395 m[4][8] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 396 m[4][9] = APLICAR;
JuanManuelAmador 0:3d456b8ce449 397 m[4][10] = APLICAR;
JuanManuelAmador 0:3d456b8ce449 398 }
JuanManuelAmador 0:3d456b8ce449 399
JuanManuelAmador 0:3d456b8ce449 400 void Teclado::asignarMayusculas(){
JuanManuelAmador 0:3d456b8ce449 401 // Primera fila
JuanManuelAmador 0:3d456b8ce449 402 m[0][0] = 'Q';
JuanManuelAmador 0:3d456b8ce449 403 m[0][1] = 'W';
JuanManuelAmador 0:3d456b8ce449 404 m[0][2] = 'E';
JuanManuelAmador 0:3d456b8ce449 405 m[0][3] = 'R';
JuanManuelAmador 0:3d456b8ce449 406 m[0][4] = 'T';
JuanManuelAmador 0:3d456b8ce449 407 m[0][5] = 'Y';
JuanManuelAmador 0:3d456b8ce449 408 m[0][6] = 'U';
JuanManuelAmador 0:3d456b8ce449 409 m[0][7] = 'I';
JuanManuelAmador 0:3d456b8ce449 410 m[0][8] = 'O';
JuanManuelAmador 0:3d456b8ce449 411 m[0][9] = 'P';
JuanManuelAmador 0:3d456b8ce449 412 m[0][10] = '(';
JuanManuelAmador 0:3d456b8ce449 413
JuanManuelAmador 0:3d456b8ce449 414 // Segunda fila
JuanManuelAmador 0:3d456b8ce449 415 m[1][0] = 'A';
JuanManuelAmador 0:3d456b8ce449 416 m[1][1] = 'S';
JuanManuelAmador 0:3d456b8ce449 417 m[1][2] = 'D';
JuanManuelAmador 0:3d456b8ce449 418 m[1][3] = 'F';
JuanManuelAmador 0:3d456b8ce449 419 m[1][4] = 'G';
JuanManuelAmador 0:3d456b8ce449 420 m[1][5] = 'H';
JuanManuelAmador 0:3d456b8ce449 421 m[1][6] = 'J';
JuanManuelAmador 0:3d456b8ce449 422 m[1][7] = 'K';
JuanManuelAmador 0:3d456b8ce449 423 m[1][8] = 'L';
JuanManuelAmador 0:3d456b8ce449 424 m[1][9] = 165;
JuanManuelAmador 0:3d456b8ce449 425 m[1][10] = ')';
JuanManuelAmador 0:3d456b8ce449 426
JuanManuelAmador 0:3d456b8ce449 427 // Tercera fila
JuanManuelAmador 0:3d456b8ce449 428 m[2][0] = 'Z';
JuanManuelAmador 0:3d456b8ce449 429 m[2][1] = 'X';
JuanManuelAmador 0:3d456b8ce449 430 m[2][2] = 'C';
JuanManuelAmador 0:3d456b8ce449 431 m[2][3] = 'V';
JuanManuelAmador 0:3d456b8ce449 432 m[2][4] = 'B';
JuanManuelAmador 0:3d456b8ce449 433 m[2][5] = 'N';
JuanManuelAmador 0:3d456b8ce449 434 m[2][6] = 'M';
JuanManuelAmador 0:3d456b8ce449 435 m[2][7] = ',';
JuanManuelAmador 0:3d456b8ce449 436 m[2][8] = '.';
JuanManuelAmador 0:3d456b8ce449 437 m[2][9] = ';';
JuanManuelAmador 0:3d456b8ce449 438 m[2][10] = '_';
JuanManuelAmador 0:3d456b8ce449 439
JuanManuelAmador 0:3d456b8ce449 440 // Cuarta fila
JuanManuelAmador 0:3d456b8ce449 441 m[3][0] = '1';
JuanManuelAmador 0:3d456b8ce449 442 m[3][1] = '2';
JuanManuelAmador 0:3d456b8ce449 443 m[3][2] = '3';
JuanManuelAmador 0:3d456b8ce449 444 m[3][3] = '4';
JuanManuelAmador 0:3d456b8ce449 445 m[3][4] = '5';
JuanManuelAmador 0:3d456b8ce449 446 m[3][5] = '6';
JuanManuelAmador 0:3d456b8ce449 447 m[3][6] = '7';
JuanManuelAmador 0:3d456b8ce449 448 m[3][7] = '8';
JuanManuelAmador 0:3d456b8ce449 449 m[3][8] = '9';
JuanManuelAmador 0:3d456b8ce449 450 m[3][9] = '0';
JuanManuelAmador 0:3d456b8ce449 451 m[3][10] = BACK;
JuanManuelAmador 0:3d456b8ce449 452
JuanManuelAmador 0:3d456b8ce449 453 // Quinta fila
JuanManuelAmador 0:3d456b8ce449 454 m[4][0] = MAYUS;
JuanManuelAmador 0:3d456b8ce449 455 m[4][1] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 456 m[4][2] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 457 m[4][3] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 458 m[4][4] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 459 m[4][5] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 460 m[4][6] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 461 m[4][7] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 462 m[4][8] = SPACEBAR;
JuanManuelAmador 0:3d456b8ce449 463 m[4][9] = APLICAR;
JuanManuelAmador 0:3d456b8ce449 464 m[4][10] = APLICAR;
JuanManuelAmador 0:3d456b8ce449 465 }