Versión de Firmware con funciones de RAM incorporadas.

Dependencies:   mbed

Fork of VmRecorderV1dot1 by virtualmech

Committer:
JuanManuelAmador
Date:
Tue Jul 14 08:34:11 2015 +0000
Revision:
2:e818c80e6d5c
Parent:
0:3d456b8ce449
Funciones de memoria RAM introducidas.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JuanManuelAmador 0:3d456b8ce449 1 #include "AutoCalibracion.h"
JuanManuelAmador 0:3d456b8ce449 2 /// ACELEROMETRO DIGITAL///
JuanManuelAmador 0:3d456b8ce449 3 extern KXR94 kionix;
JuanManuelAmador 0:3d456b8ce449 4
JuanManuelAmador 0:3d456b8ce449 5 extern ScreenManager SC;
JuanManuelAmador 0:3d456b8ce449 6 extern SistemaArchivos SA;
JuanManuelAmador 0:3d456b8ce449 7 extern Configuracion config;
JuanManuelAmador 0:3d456b8ce449 8 extern MSCFileSystem msc;
JuanManuelAmador 0:3d456b8ce449 9
JuanManuelAmador 0:3d456b8ce449 10 extern DigitalIn boton5;
JuanManuelAmador 0:3d456b8ce449 11 extern DigitalIn boton6;
JuanManuelAmador 0:3d456b8ce449 12
JuanManuelAmador 0:3d456b8ce449 13 void AutoCalibracion::initialize(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 14 pasoCalibracion = 0; // Pantalla de introduccion
JuanManuelAmador 0:3d456b8ce449 15
JuanManuelAmador 0:3d456b8ce449 16 mediaXpos = 0;
JuanManuelAmador 0:3d456b8ce449 17 mediaYpos = 0;
JuanManuelAmador 0:3d456b8ce449 18 mediaZpos = 0;
JuanManuelAmador 0:3d456b8ce449 19 mediaXneg = 0;
JuanManuelAmador 0:3d456b8ce449 20 mediaYneg = 0;
JuanManuelAmador 0:3d456b8ce449 21 mediaZneg = 0;
JuanManuelAmador 0:3d456b8ce449 22
JuanManuelAmador 0:3d456b8ce449 23 // Inicilización de las variables
JuanManuelAmador 0:3d456b8ce449 24 pulsado5 = false;
JuanManuelAmador 0:3d456b8ce449 25 pulsado6 = false;
JuanManuelAmador 0:3d456b8ce449 26 leyendoDatos = false;
JuanManuelAmador 0:3d456b8ce449 27
JuanManuelAmador 0:3d456b8ce449 28 char idioma[16];
JuanManuelAmador 0:3d456b8ce449 29 // Se selecciona el idioma
JuanManuelAmador 0:3d456b8ce449 30 config.getIdioma(idioma);
JuanManuelAmador 0:3d456b8ce449 31
JuanManuelAmador 0:3d456b8ce449 32 // select font to use:
JuanManuelAmador 0:3d456b8ce449 33 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 34
JuanManuelAmador 0:3d456b8ce449 35 // output title text
JuanManuelAmador 0:3d456b8ce449 36 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 37 lcd->XString( OFFSETX, OFFSETY, "Autocalibraci\242n");
JuanManuelAmador 0:3d456b8ce449 38 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 39 lcd->XString( OFFSETX, OFFSETY, "Autocalibration");
JuanManuelAmador 0:3d456b8ce449 40 }
JuanManuelAmador 0:3d456b8ce449 41
JuanManuelAmador 0:3d456b8ce449 42 lcd->XFont = xfont_8;
JuanManuelAmador 0:3d456b8ce449 43
JuanManuelAmador 0:3d456b8ce449 44 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 45 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG, "Siga los pasos siguientes");
JuanManuelAmador 0:3d456b8ce449 46 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8, "para calibrar el");
JuanManuelAmador 0:3d456b8ce449 47 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8*2, "dispositivo.");
JuanManuelAmador 0:3d456b8ce449 48 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 49 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG, "Follow next steps to");
JuanManuelAmador 0:3d456b8ce449 50 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8, "calibrate the device.");
JuanManuelAmador 0:3d456b8ce449 51 }
JuanManuelAmador 0:3d456b8ce449 52
JuanManuelAmador 0:3d456b8ce449 53 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 54 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 55
JuanManuelAmador 0:3d456b8ce449 56 // Se prepara el acelerómetro
JuanManuelAmador 0:3d456b8ce449 57 kionix.AcelerometroWakeUp();
JuanManuelAmador 0:3d456b8ce449 58 // select font to use:
JuanManuelAmador 0:3d456b8ce449 59 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 60
JuanManuelAmador 0:3d456b8ce449 61 // output msg2 text
JuanManuelAmador 0:3d456b8ce449 62 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 63 lcd->XString( OFFSETX, HEIGHT -1 - 18, "OK para continuar.");
JuanManuelAmador 0:3d456b8ce449 64 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 65 lcd->XString( OFFSETX, HEIGHT -1 - 18, "OK to continue.");
JuanManuelAmador 0:3d456b8ce449 66 }
JuanManuelAmador 0:3d456b8ce449 67
JuanManuelAmador 0:3d456b8ce449 68 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 69 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 70 }
JuanManuelAmador 0:3d456b8ce449 71
JuanManuelAmador 0:3d456b8ce449 72 void AutoCalibracion::update(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 73 // Si se están leyendo datos se comprueba si se ha tomado el número de medidas deseadas
JuanManuelAmador 0:3d456b8ce449 74 if(leyendoDatos){
JuanManuelAmador 0:3d456b8ce449 75 if(datosCapturados >= NDATOSPASO){ // Se ha acabado la lectura de los datos
JuanManuelAmador 0:3d456b8ce449 76 // Se para la lectura de datos
JuanManuelAmador 0:3d456b8ce449 77 tickerLectura.detach();
JuanManuelAmador 0:3d456b8ce449 78
JuanManuelAmador 0:3d456b8ce449 79 leyendoDatos = false;
JuanManuelAmador 0:3d456b8ce449 80
JuanManuelAmador 0:3d456b8ce449 81 // Se guarda el valor de la media en su variable correspondiente
JuanManuelAmador 0:3d456b8ce449 82 // Dependiendo del paso nos interesa sumar un eje en concreto
JuanManuelAmador 0:3d456b8ce449 83 switch(pasoCalibracion){
JuanManuelAmador 0:3d456b8ce449 84 case 1:
JuanManuelAmador 0:3d456b8ce449 85 mediaXpos = mediaAux/NDATOSPASO;
JuanManuelAmador 0:3d456b8ce449 86 //mediaZpos = mediaAux;
JuanManuelAmador 0:3d456b8ce449 87 break;
JuanManuelAmador 0:3d456b8ce449 88
JuanManuelAmador 0:3d456b8ce449 89 case 2:
JuanManuelAmador 0:3d456b8ce449 90 mediaXneg = mediaAux/NDATOSPASO;
JuanManuelAmador 0:3d456b8ce449 91 //mediaXneg = mediaAux;
JuanManuelAmador 0:3d456b8ce449 92 break;
JuanManuelAmador 0:3d456b8ce449 93
JuanManuelAmador 0:3d456b8ce449 94 case 3:
JuanManuelAmador 0:3d456b8ce449 95 mediaYneg = mediaAux/NDATOSPASO;
JuanManuelAmador 0:3d456b8ce449 96 //mediaXpos = mediaAux;
JuanManuelAmador 0:3d456b8ce449 97 break;
JuanManuelAmador 0:3d456b8ce449 98
JuanManuelAmador 0:3d456b8ce449 99 case 4:
JuanManuelAmador 0:3d456b8ce449 100 mediaYpos = mediaAux/NDATOSPASO;
JuanManuelAmador 0:3d456b8ce449 101 //mediaYpos = mediaAux;
JuanManuelAmador 0:3d456b8ce449 102 break;
JuanManuelAmador 0:3d456b8ce449 103
JuanManuelAmador 0:3d456b8ce449 104 case 5:
JuanManuelAmador 0:3d456b8ce449 105 mediaZpos = mediaAux/NDATOSPASO;
JuanManuelAmador 0:3d456b8ce449 106 //mediaYneg = mediaAux;
JuanManuelAmador 0:3d456b8ce449 107 break;
JuanManuelAmador 0:3d456b8ce449 108
JuanManuelAmador 0:3d456b8ce449 109 case 6:
JuanManuelAmador 0:3d456b8ce449 110 mediaZneg = mediaAux/NDATOSPASO;
JuanManuelAmador 0:3d456b8ce449 111 //mediaZneg = mediaAux;
JuanManuelAmador 0:3d456b8ce449 112
JuanManuelAmador 0:3d456b8ce449 113 // Una vez terminado el paso 6 ya se tienen los datos suficientes para calcular los parámetros de calibración
JuanManuelAmador 0:3d456b8ce449 114 // Primero se calculan los factores de conversión a unidades físicas
JuanManuelAmador 0:3d456b8ce449 115 float newKX;
JuanManuelAmador 0:3d456b8ce449 116 float newKY;
JuanManuelAmador 0:3d456b8ce449 117 float newKZ;
JuanManuelAmador 0:3d456b8ce449 118 if(mediaXpos >= mediaXneg){
JuanManuelAmador 0:3d456b8ce449 119 newKX = (2.0*ACELGRAVEDAD)/(mediaXpos - mediaXneg);
JuanManuelAmador 0:3d456b8ce449 120 }else{
JuanManuelAmador 0:3d456b8ce449 121 newKX = (2.0*ACELGRAVEDAD)/(mediaXneg - mediaXpos);
JuanManuelAmador 0:3d456b8ce449 122 }
JuanManuelAmador 0:3d456b8ce449 123
JuanManuelAmador 0:3d456b8ce449 124 if(mediaYpos >= mediaYneg){
JuanManuelAmador 0:3d456b8ce449 125 newKY = (2.0*ACELGRAVEDAD)/(mediaYpos - mediaYneg);
JuanManuelAmador 0:3d456b8ce449 126 }else{
JuanManuelAmador 0:3d456b8ce449 127 newKY = (2.0*ACELGRAVEDAD)/(mediaYneg - mediaYpos);
JuanManuelAmador 0:3d456b8ce449 128 }
JuanManuelAmador 0:3d456b8ce449 129
JuanManuelAmador 0:3d456b8ce449 130 if(mediaZpos >= mediaZneg){
JuanManuelAmador 0:3d456b8ce449 131 newKZ = (2.0*ACELGRAVEDAD)/(mediaZpos - mediaZneg);
JuanManuelAmador 0:3d456b8ce449 132 }else{
JuanManuelAmador 0:3d456b8ce449 133 newKZ = (2.0*ACELGRAVEDAD)/(mediaZneg - mediaZpos);
JuanManuelAmador 0:3d456b8ce449 134 }
JuanManuelAmador 0:3d456b8ce449 135
JuanManuelAmador 0:3d456b8ce449 136 // Se calcula el offset de cada eje
JuanManuelAmador 0:3d456b8ce449 137 float newAX;
JuanManuelAmador 0:3d456b8ce449 138 float newAY;
JuanManuelAmador 0:3d456b8ce449 139 float newAZ;
JuanManuelAmador 0:3d456b8ce449 140
JuanManuelAmador 0:3d456b8ce449 141 //if(mediaXpos >= mediaXneg){
JuanManuelAmador 0:3d456b8ce449 142 //newAX = mediaXpos - (ACELGRAVEDAD/KX);
JuanManuelAmador 0:3d456b8ce449 143 /*}else{
JuanManuelAmador 0:3d456b8ce449 144 newAX = mediaXneg - (ACELGRAVEDAD/KX);
JuanManuelAmador 0:3d456b8ce449 145 }*/
JuanManuelAmador 0:3d456b8ce449 146
JuanManuelAmador 0:3d456b8ce449 147 //if(mediaYpos >= mediaYneg){
JuanManuelAmador 0:3d456b8ce449 148 //newAY = mediaYpos - (ACELGRAVEDAD/KY);
JuanManuelAmador 0:3d456b8ce449 149 /*}else{
JuanManuelAmador 0:3d456b8ce449 150 newAY = mediaYneg - (ACELGRAVEDAD/KY);
JuanManuelAmador 0:3d456b8ce449 151 }*/
JuanManuelAmador 0:3d456b8ce449 152
JuanManuelAmador 0:3d456b8ce449 153 //if(mediaZpos >= mediaZneg){
JuanManuelAmador 0:3d456b8ce449 154 //newAZ = mediaZpos - (ACELGRAVEDAD/KZ);
JuanManuelAmador 0:3d456b8ce449 155 /*}else{
JuanManuelAmador 0:3d456b8ce449 156 newAZ = mediaZneg - (ACELGRAVEDAD/KZ);
JuanManuelAmador 0:3d456b8ce449 157 }*/
JuanManuelAmador 0:3d456b8ce449 158
JuanManuelAmador 0:3d456b8ce449 159 newAX = (mediaXpos + mediaXneg)/2.0;
JuanManuelAmador 0:3d456b8ce449 160 newAY = (mediaYpos + mediaYneg)/2.0;
JuanManuelAmador 0:3d456b8ce449 161 newAZ = (mediaZpos + mediaZneg)/2.0;
JuanManuelAmador 0:3d456b8ce449 162
JuanManuelAmador 0:3d456b8ce449 163 float param[] = {newAX, newAY, newAZ, newKX, newKY, newKZ};
JuanManuelAmador 0:3d456b8ce449 164
JuanManuelAmador 0:3d456b8ce449 165 /*FILE* fp = fopen("/local/prueba1.txt","w");
JuanManuelAmador 0:3d456b8ce449 166 fprintf(fp, "%f\n%f\n\n%f\n%f\n\n%f\n%f\n\n%f\n%f\n%f\n\n%f\n%f\n%f\n", mediaYpos, mediaYneg, mediaXpos, mediaXneg, mediaZneg, mediaZpos, newAX, newAY, newAZ, newKX, newKY, newKZ);
JuanManuelAmador 0:3d456b8ce449 167 fclose(fp);*/
JuanManuelAmador 0:3d456b8ce449 168
JuanManuelAmador 0:3d456b8ce449 169 // Se guardan los nuevos valores de calibración
JuanManuelAmador 0:3d456b8ce449 170 ParametrosCalibracion::saveValores(param);
JuanManuelAmador 0:3d456b8ce449 171
JuanManuelAmador 0:3d456b8ce449 172 break;
JuanManuelAmador 0:3d456b8ce449 173 }
JuanManuelAmador 0:3d456b8ce449 174
JuanManuelAmador 0:3d456b8ce449 175 pasoCalibracion++;
JuanManuelAmador 0:3d456b8ce449 176
JuanManuelAmador 0:3d456b8ce449 177 // Se pinta la siguiente pantalla
JuanManuelAmador 0:3d456b8ce449 178 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 179
JuanManuelAmador 0:3d456b8ce449 180 }
JuanManuelAmador 0:3d456b8ce449 181 }
JuanManuelAmador 0:3d456b8ce449 182
JuanManuelAmador 0:3d456b8ce449 183 // Botón OK
JuanManuelAmador 0:3d456b8ce449 184 if(boton5 == 1){
JuanManuelAmador 0:3d456b8ce449 185 pulsado5 = true;
JuanManuelAmador 0:3d456b8ce449 186 }else{
JuanManuelAmador 0:3d456b8ce449 187 if(pulsado5 == true){ // El boton ha sido pulsado
JuanManuelAmador 0:3d456b8ce449 188 pulsado5 = false;
JuanManuelAmador 0:3d456b8ce449 189 if(!leyendoDatos){ // Si el viaje no habia comenzado
JuanManuelAmador 0:3d456b8ce449 190 leyendoDatos = true;
JuanManuelAmador 0:3d456b8ce449 191
JuanManuelAmador 0:3d456b8ce449 192 // Se borra la pantalla
JuanManuelAmador 0:3d456b8ce449 193 lcd->Clear();
JuanManuelAmador 0:3d456b8ce449 194
JuanManuelAmador 0:3d456b8ce449 195 char idioma[16];
JuanManuelAmador 0:3d456b8ce449 196 // Se selecciona el idioma
JuanManuelAmador 0:3d456b8ce449 197 config.getIdioma(idioma);
JuanManuelAmador 0:3d456b8ce449 198
JuanManuelAmador 0:3d456b8ce449 199 // select font to use:
JuanManuelAmador 0:3d456b8ce449 200 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 201
JuanManuelAmador 0:3d456b8ce449 202 // Algunos mensajes son comunes para todos los pasos
JuanManuelAmador 0:3d456b8ce449 203 // output msg2 text
JuanManuelAmador 0:3d456b8ce449 204 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 205 lcd->XString( OFFSETX, HEIGHT -1 - 18, "OK para continuar.");
JuanManuelAmador 0:3d456b8ce449 206 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 207 lcd->XString( OFFSETX, HEIGHT -1 - 18, "OK to continue.");
JuanManuelAmador 0:3d456b8ce449 208 }
JuanManuelAmador 0:3d456b8ce449 209
JuanManuelAmador 0:3d456b8ce449 210 // Dependiendo del paso nos interesa sumar un eje en concreto
JuanManuelAmador 0:3d456b8ce449 211 switch(pasoCalibracion){
JuanManuelAmador 0:3d456b8ce449 212 case 0:
JuanManuelAmador 0:3d456b8ce449 213 // Se pasa directamente al Paso 1
JuanManuelAmador 0:3d456b8ce449 214 leyendoDatos = false;
JuanManuelAmador 0:3d456b8ce449 215
JuanManuelAmador 0:3d456b8ce449 216 // select font to use:
JuanManuelAmador 0:3d456b8ce449 217 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 218
JuanManuelAmador 0:3d456b8ce449 219 // output title text
JuanManuelAmador 0:3d456b8ce449 220 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 221 lcd->XString( OFFSETX, OFFSETY, "Paso 1");
JuanManuelAmador 0:3d456b8ce449 222 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 223 lcd->XString( OFFSETX, OFFSETY, "Step 1");
JuanManuelAmador 0:3d456b8ce449 224 }
JuanManuelAmador 0:3d456b8ce449 225
JuanManuelAmador 0:3d456b8ce449 226 lcd->XFont = xfont_8;
JuanManuelAmador 0:3d456b8ce449 227
JuanManuelAmador 0:3d456b8ce449 228 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 229 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG, "Coloque la cara derecha del");
JuanManuelAmador 0:3d456b8ce449 230 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8, "dispositivo sobre una");
JuanManuelAmador 0:3d456b8ce449 231 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8*2, "superficie plana.");
JuanManuelAmador 0:3d456b8ce449 232 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 233 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG, "Place the right side of the");
JuanManuelAmador 0:3d456b8ce449 234 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8, "device on a flat surface.");
JuanManuelAmador 0:3d456b8ce449 235 }
JuanManuelAmador 0:3d456b8ce449 236
JuanManuelAmador 0:3d456b8ce449 237 // Se prepara el acelerómetro
JuanManuelAmador 0:3d456b8ce449 238 kionix.AcelerometroWakeUp();
JuanManuelAmador 0:3d456b8ce449 239
JuanManuelAmador 0:3d456b8ce449 240 // Se pinta la siguiente pantalla
JuanManuelAmador 0:3d456b8ce449 241 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 242 pasoCalibracion++;
JuanManuelAmador 0:3d456b8ce449 243 break;
JuanManuelAmador 0:3d456b8ce449 244
JuanManuelAmador 0:3d456b8ce449 245 case 1:
JuanManuelAmador 0:3d456b8ce449 246 // Lectura de datos del paso 1, se prepara la pantalla del paso 2
JuanManuelAmador 0:3d456b8ce449 247
JuanManuelAmador 0:3d456b8ce449 248 // select font to use:
JuanManuelAmador 0:3d456b8ce449 249 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 250
JuanManuelAmador 0:3d456b8ce449 251 // output title text
JuanManuelAmador 0:3d456b8ce449 252 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 253 lcd->XString( OFFSETX, OFFSETY, "Paso 2");
JuanManuelAmador 0:3d456b8ce449 254 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 255 lcd->XString( OFFSETX, OFFSETY, "Step 2");
JuanManuelAmador 0:3d456b8ce449 256 }
JuanManuelAmador 0:3d456b8ce449 257
JuanManuelAmador 0:3d456b8ce449 258 lcd->XFont = xfont_8;
JuanManuelAmador 0:3d456b8ce449 259
JuanManuelAmador 0:3d456b8ce449 260 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 261 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG, "Coloque la cara izquierda del");
JuanManuelAmador 0:3d456b8ce449 262 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8, "dispositivo sobre una");
JuanManuelAmador 0:3d456b8ce449 263 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8*2, "superficie plana.");
JuanManuelAmador 0:3d456b8ce449 264 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 265 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG, "Place the left side of the");
JuanManuelAmador 0:3d456b8ce449 266 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8, "device on a flat surface.");
JuanManuelAmador 0:3d456b8ce449 267 }
JuanManuelAmador 0:3d456b8ce449 268
JuanManuelAmador 0:3d456b8ce449 269 mediaAux = 0;
JuanManuelAmador 0:3d456b8ce449 270 datosCapturados = 0;
JuanManuelAmador 0:3d456b8ce449 271
JuanManuelAmador 0:3d456b8ce449 272 // Se espera unos segundos antes de comenzar a tomar medidas para asegurar las vibraciones debidas
JuanManuelAmador 0:3d456b8ce449 273 // a la pulsación del botón no interfieren en las medidas
JuanManuelAmador 0:3d456b8ce449 274 wait(OFFSETTIEMPO);
JuanManuelAmador 0:3d456b8ce449 275 // Se comienza a leer el acelerómetro
JuanManuelAmador 0:3d456b8ce449 276 tickerLectura.attach_us(this, &AutoCalibracion::LeeAcelerometro, USENTREDATOS);
JuanManuelAmador 0:3d456b8ce449 277
JuanManuelAmador 0:3d456b8ce449 278 break;
JuanManuelAmador 0:3d456b8ce449 279
JuanManuelAmador 0:3d456b8ce449 280 case 2:
JuanManuelAmador 0:3d456b8ce449 281
JuanManuelAmador 0:3d456b8ce449 282 // Lectura de datos del paso 1, se prepara la pantalla del paso 3
JuanManuelAmador 0:3d456b8ce449 283
JuanManuelAmador 0:3d456b8ce449 284 // select font to use:
JuanManuelAmador 0:3d456b8ce449 285 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 286
JuanManuelAmador 0:3d456b8ce449 287 // output title text
JuanManuelAmador 0:3d456b8ce449 288 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 289 lcd->XString( OFFSETX, OFFSETY, "Paso 3");
JuanManuelAmador 0:3d456b8ce449 290 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 291 lcd->XString( OFFSETX, OFFSETY, "Step 3");
JuanManuelAmador 0:3d456b8ce449 292 }
JuanManuelAmador 0:3d456b8ce449 293
JuanManuelAmador 0:3d456b8ce449 294 lcd->XFont = xfont_8;
JuanManuelAmador 0:3d456b8ce449 295
JuanManuelAmador 0:3d456b8ce449 296 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 297 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG, "Coloque la cara superior del");
JuanManuelAmador 0:3d456b8ce449 298 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8, "dispositivo sobre una");
JuanManuelAmador 0:3d456b8ce449 299 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8*2, "superficie plana.");
JuanManuelAmador 0:3d456b8ce449 300 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 301 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG, "Place the top side of the");
JuanManuelAmador 0:3d456b8ce449 302 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8, "device on a flat surface.");
JuanManuelAmador 0:3d456b8ce449 303 }
JuanManuelAmador 0:3d456b8ce449 304
JuanManuelAmador 0:3d456b8ce449 305 mediaAux = 0;
JuanManuelAmador 0:3d456b8ce449 306 datosCapturados = 0;
JuanManuelAmador 0:3d456b8ce449 307
JuanManuelAmador 0:3d456b8ce449 308 // Se espera unos segundos antes de comenzar a tomar medidas para asegurar las vibraciones debidas
JuanManuelAmador 0:3d456b8ce449 309 // a la pulsación del botón no interfieren en las medidas
JuanManuelAmador 0:3d456b8ce449 310 wait(OFFSETTIEMPO);
JuanManuelAmador 0:3d456b8ce449 311 // Se comienza a leer el acelerómetro
JuanManuelAmador 0:3d456b8ce449 312 tickerLectura.attach_us(this, &AutoCalibracion::LeeAcelerometro, USENTREDATOS);
JuanManuelAmador 0:3d456b8ce449 313
JuanManuelAmador 0:3d456b8ce449 314 break;
JuanManuelAmador 0:3d456b8ce449 315
JuanManuelAmador 0:3d456b8ce449 316 case 3:
JuanManuelAmador 0:3d456b8ce449 317
JuanManuelAmador 0:3d456b8ce449 318 // Lectura de datos del paso 1, se prepara la pantalla del paso 4
JuanManuelAmador 0:3d456b8ce449 319
JuanManuelAmador 0:3d456b8ce449 320 // select font to use:
JuanManuelAmador 0:3d456b8ce449 321 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 322
JuanManuelAmador 0:3d456b8ce449 323 // output title text
JuanManuelAmador 0:3d456b8ce449 324 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 325 lcd->XString( OFFSETX, OFFSETY, "Paso 4");
JuanManuelAmador 0:3d456b8ce449 326 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 327 lcd->XString( OFFSETX, OFFSETY, "Step 4");
JuanManuelAmador 0:3d456b8ce449 328 }
JuanManuelAmador 0:3d456b8ce449 329
JuanManuelAmador 0:3d456b8ce449 330 lcd->XFont = xfont_8;
JuanManuelAmador 0:3d456b8ce449 331
JuanManuelAmador 0:3d456b8ce449 332 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 333 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG, "Coloque la cara inferior del");
JuanManuelAmador 0:3d456b8ce449 334 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8, "dispositivo sobre una");
JuanManuelAmador 0:3d456b8ce449 335 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8*2, "superficie plana.");
JuanManuelAmador 0:3d456b8ce449 336 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 337 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG, "Place the bottom side of the");
JuanManuelAmador 0:3d456b8ce449 338 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8, "device on a flat surface.");
JuanManuelAmador 0:3d456b8ce449 339 }
JuanManuelAmador 0:3d456b8ce449 340
JuanManuelAmador 0:3d456b8ce449 341 mediaAux = 0;
JuanManuelAmador 0:3d456b8ce449 342 datosCapturados = 0;
JuanManuelAmador 0:3d456b8ce449 343
JuanManuelAmador 0:3d456b8ce449 344 // Se espera unos segundos antes de comenzar a tomar medidas para asegurar las vibraciones debidas
JuanManuelAmador 0:3d456b8ce449 345 // a la pulsación del botón no interfieren en las medidas
JuanManuelAmador 0:3d456b8ce449 346 wait(OFFSETTIEMPO);
JuanManuelAmador 0:3d456b8ce449 347 // Se comienza a leer el acelerómetro
JuanManuelAmador 0:3d456b8ce449 348 tickerLectura.attach_us(this, &AutoCalibracion::LeeAcelerometro, USENTREDATOS);
JuanManuelAmador 0:3d456b8ce449 349
JuanManuelAmador 0:3d456b8ce449 350 break;
JuanManuelAmador 0:3d456b8ce449 351
JuanManuelAmador 0:3d456b8ce449 352 case 4:
JuanManuelAmador 0:3d456b8ce449 353
JuanManuelAmador 0:3d456b8ce449 354 // Lectura de datos del paso 1, se prepara la pantalla del paso 5
JuanManuelAmador 0:3d456b8ce449 355
JuanManuelAmador 0:3d456b8ce449 356 // select font to use:
JuanManuelAmador 0:3d456b8ce449 357 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 358
JuanManuelAmador 0:3d456b8ce449 359 // output title text
JuanManuelAmador 0:3d456b8ce449 360 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 361 lcd->XString( OFFSETX, OFFSETY, "Paso 5");
JuanManuelAmador 0:3d456b8ce449 362 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 363 lcd->XString( OFFSETX, OFFSETY, "Step 5");
JuanManuelAmador 0:3d456b8ce449 364 }
JuanManuelAmador 0:3d456b8ce449 365
JuanManuelAmador 0:3d456b8ce449 366 lcd->XFont = xfont_8;
JuanManuelAmador 0:3d456b8ce449 367
JuanManuelAmador 0:3d456b8ce449 368 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 369 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG, "Coloque la cara frontal del");
JuanManuelAmador 0:3d456b8ce449 370 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8, "dispositivo sobre una");
JuanManuelAmador 0:3d456b8ce449 371 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8*2, "superficie plana.");
JuanManuelAmador 0:3d456b8ce449 372 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 373 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG, "Place the front side of the");
JuanManuelAmador 0:3d456b8ce449 374 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8, "device on a flat surface.");
JuanManuelAmador 0:3d456b8ce449 375 }
JuanManuelAmador 0:3d456b8ce449 376
JuanManuelAmador 0:3d456b8ce449 377 mediaAux = 0;
JuanManuelAmador 0:3d456b8ce449 378 datosCapturados = 0;
JuanManuelAmador 0:3d456b8ce449 379
JuanManuelAmador 0:3d456b8ce449 380 // Se espera unos segundos antes de comenzar a tomar medidas para asegurar las vibraciones debidas
JuanManuelAmador 0:3d456b8ce449 381 // a la pulsación del botón no interfieren en las medidas
JuanManuelAmador 0:3d456b8ce449 382 wait(OFFSETTIEMPO);
JuanManuelAmador 0:3d456b8ce449 383 // Se comienza a leer el acelerómetro
JuanManuelAmador 0:3d456b8ce449 384 tickerLectura.attach_us(this, &AutoCalibracion::LeeAcelerometro, USENTREDATOS);
JuanManuelAmador 0:3d456b8ce449 385
JuanManuelAmador 0:3d456b8ce449 386 break;
JuanManuelAmador 0:3d456b8ce449 387
JuanManuelAmador 0:3d456b8ce449 388 case 5:
JuanManuelAmador 0:3d456b8ce449 389
JuanManuelAmador 0:3d456b8ce449 390 // Lectura de datos del paso 1, se prepara la pantalla del paso 6
JuanManuelAmador 0:3d456b8ce449 391
JuanManuelAmador 0:3d456b8ce449 392 // select font to use:
JuanManuelAmador 0:3d456b8ce449 393 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 394
JuanManuelAmador 0:3d456b8ce449 395 // output title text
JuanManuelAmador 0:3d456b8ce449 396 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 397 lcd->XString( OFFSETX, OFFSETY, "Paso 6");
JuanManuelAmador 0:3d456b8ce449 398 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 399 lcd->XString( OFFSETX, OFFSETY, "Step 6");
JuanManuelAmador 0:3d456b8ce449 400 }
JuanManuelAmador 0:3d456b8ce449 401
JuanManuelAmador 0:3d456b8ce449 402 lcd->XFont = xfont_8;
JuanManuelAmador 0:3d456b8ce449 403
JuanManuelAmador 0:3d456b8ce449 404 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 405 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG, "Coloque la cara trasera del");
JuanManuelAmador 0:3d456b8ce449 406 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8, "dispositivo sobre una");
JuanManuelAmador 0:3d456b8ce449 407 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8*2, "superficie plana.");
JuanManuelAmador 0:3d456b8ce449 408 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 409 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG, "Place the rear side of the");
JuanManuelAmador 0:3d456b8ce449 410 lcd->XString( OFFSETX, OFFSETY + OFFSETMSG + 8, "device on a flat surface.");
JuanManuelAmador 0:3d456b8ce449 411 }
JuanManuelAmador 0:3d456b8ce449 412
JuanManuelAmador 0:3d456b8ce449 413 mediaAux = 0;
JuanManuelAmador 0:3d456b8ce449 414 datosCapturados = 0;
JuanManuelAmador 0:3d456b8ce449 415
JuanManuelAmador 0:3d456b8ce449 416 // Se espera unos segundos antes de comenzar a tomar medidas para asegurar las vibraciones debidas
JuanManuelAmador 0:3d456b8ce449 417 // a la pulsación del botón no interfieren en las medidas
JuanManuelAmador 0:3d456b8ce449 418 wait(OFFSETTIEMPO*2);
JuanManuelAmador 0:3d456b8ce449 419 // Se comienza a leer el acelerómetro
JuanManuelAmador 0:3d456b8ce449 420 tickerLectura.attach_us(this, &AutoCalibracion::LeeAcelerometro, USENTREDATOS);
JuanManuelAmador 0:3d456b8ce449 421
JuanManuelAmador 0:3d456b8ce449 422 break;
JuanManuelAmador 0:3d456b8ce449 423
JuanManuelAmador 0:3d456b8ce449 424 case 6:
JuanManuelAmador 0:3d456b8ce449 425
JuanManuelAmador 0:3d456b8ce449 426 // select font to use:
JuanManuelAmador 0:3d456b8ce449 427 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 428
JuanManuelAmador 0:3d456b8ce449 429 // output title text
JuanManuelAmador 0:3d456b8ce449 430 if(strcmp(idioma, "spanish") == 0){
JuanManuelAmador 0:3d456b8ce449 431 lcd->XString( OFFSETX + 28, OFFSETY + 8, "Calibraci\242n");
JuanManuelAmador 0:3d456b8ce449 432 lcd->XString( OFFSETX + 28, OFFSETY + 8 + 12, "completada.");
JuanManuelAmador 0:3d456b8ce449 433 }else if(strcmp(idioma, "english") == 0){
JuanManuelAmador 0:3d456b8ce449 434 lcd->XString( OFFSETX + 28, OFFSETY + 8, "Calibration");
JuanManuelAmador 0:3d456b8ce449 435 lcd->XString( OFFSETX + 28, OFFSETY + 8 + 12, "completed.");
JuanManuelAmador 0:3d456b8ce449 436 }
JuanManuelAmador 0:3d456b8ce449 437
JuanManuelAmador 0:3d456b8ce449 438 mediaAux = 0;
JuanManuelAmador 0:3d456b8ce449 439 datosCapturados = 0;
JuanManuelAmador 0:3d456b8ce449 440
JuanManuelAmador 0:3d456b8ce449 441 // Se espera unos segundos antes de comenzar a tomar medidas para asegurar las vibraciones debidas
JuanManuelAmador 0:3d456b8ce449 442 // a la pulsación del botón no interfieren en las medidas
JuanManuelAmador 0:3d456b8ce449 443 wait(OFFSETTIEMPO);
JuanManuelAmador 0:3d456b8ce449 444 // Se comienza a leer el acelerómetro
JuanManuelAmador 0:3d456b8ce449 445 tickerLectura.attach_us(this, &AutoCalibracion::LeeAcelerometro, USENTREDATOS);
JuanManuelAmador 0:3d456b8ce449 446
JuanManuelAmador 0:3d456b8ce449 447 break;
JuanManuelAmador 0:3d456b8ce449 448
JuanManuelAmador 0:3d456b8ce449 449 case 7:
JuanManuelAmador 0:3d456b8ce449 450 // Se duerme el acelerómetro
JuanManuelAmador 0:3d456b8ce449 451 kionix.AcelerometroSleep();
JuanManuelAmador 0:3d456b8ce449 452 // Se vuelve a la pantalla de configuración
JuanManuelAmador 0:3d456b8ce449 453 SC.changeScreen("configuracion");
JuanManuelAmador 0:3d456b8ce449 454 break;
JuanManuelAmador 0:3d456b8ce449 455 }
JuanManuelAmador 0:3d456b8ce449 456 }
JuanManuelAmador 0:3d456b8ce449 457 }
JuanManuelAmador 0:3d456b8ce449 458 }
JuanManuelAmador 0:3d456b8ce449 459
JuanManuelAmador 0:3d456b8ce449 460 // Botón atrás
JuanManuelAmador 0:3d456b8ce449 461 if(boton6 == 1){
JuanManuelAmador 0:3d456b8ce449 462 pulsado6 = true;
JuanManuelAmador 0:3d456b8ce449 463 }else{
JuanManuelAmador 0:3d456b8ce449 464 if(pulsado6 == true){
JuanManuelAmador 0:3d456b8ce449 465 pulsado6 = false;
JuanManuelAmador 0:3d456b8ce449 466 // En cualquier momento puede volverse atrás (al menú de configuración) parando el proceso actual y perdiendo todos los datos que se hayan guardado de la calibración hasta el mommento, teniendo que repetir el proceso
JuanManuelAmador 0:3d456b8ce449 467 // Se duerme el acelerómetro
JuanManuelAmador 0:3d456b8ce449 468 kionix.AcelerometroSleep();
JuanManuelAmador 0:3d456b8ce449 469 SC.changeScreen("configuracion");
JuanManuelAmador 0:3d456b8ce449 470 }
JuanManuelAmador 0:3d456b8ce449 471 }
JuanManuelAmador 0:3d456b8ce449 472 }
JuanManuelAmador 0:3d456b8ce449 473
JuanManuelAmador 0:3d456b8ce449 474 void AutoCalibracion::LeeAcelerometro()
JuanManuelAmador 0:3d456b8ce449 475 {
JuanManuelAmador 0:3d456b8ce449 476 kionix.ReadAccels_KXR94(readings);
JuanManuelAmador 0:3d456b8ce449 477
JuanManuelAmador 0:3d456b8ce449 478 // Dependiendo del paso nos interesa sumar un eje en concreto
JuanManuelAmador 0:3d456b8ce449 479 switch(pasoCalibracion){
JuanManuelAmador 0:3d456b8ce449 480 case 1:
JuanManuelAmador 0:3d456b8ce449 481 mediaAux += readings[0];
JuanManuelAmador 0:3d456b8ce449 482 break;
JuanManuelAmador 0:3d456b8ce449 483
JuanManuelAmador 0:3d456b8ce449 484 case 2:
JuanManuelAmador 0:3d456b8ce449 485 mediaAux += readings[0];
JuanManuelAmador 0:3d456b8ce449 486 break;
JuanManuelAmador 0:3d456b8ce449 487
JuanManuelAmador 0:3d456b8ce449 488 case 3:
JuanManuelAmador 0:3d456b8ce449 489 mediaAux += readings[1];
JuanManuelAmador 0:3d456b8ce449 490 break;
JuanManuelAmador 0:3d456b8ce449 491
JuanManuelAmador 0:3d456b8ce449 492 case 4:
JuanManuelAmador 0:3d456b8ce449 493 mediaAux += readings[1];
JuanManuelAmador 0:3d456b8ce449 494 break;
JuanManuelAmador 0:3d456b8ce449 495
JuanManuelAmador 0:3d456b8ce449 496 case 5:
JuanManuelAmador 0:3d456b8ce449 497 mediaAux += readings[2];
JuanManuelAmador 0:3d456b8ce449 498 break;
JuanManuelAmador 0:3d456b8ce449 499
JuanManuelAmador 0:3d456b8ce449 500 case 6:
JuanManuelAmador 0:3d456b8ce449 501 mediaAux += readings[2];
JuanManuelAmador 0:3d456b8ce449 502 break;
JuanManuelAmador 0:3d456b8ce449 503 }
JuanManuelAmador 0:3d456b8ce449 504
JuanManuelAmador 0:3d456b8ce449 505 datosCapturados++;
JuanManuelAmador 0:3d456b8ce449 506 }