Versión sin post-procesado del software del VmRideR

Dependencies:   mbed

Committer:
JuanManuelAmador
Date:
Mon Jun 15 15:34:27 2015 +0000
Revision:
0:3d456b8ce449
prueba

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JuanManuelAmador 0:3d456b8ce449 1 #include "NuevoViaje.h"
JuanManuelAmador 0:3d456b8ce449 2 /// ACELEROMETRO DIGITAL///
JuanManuelAmador 0:3d456b8ce449 3 KXR94 kionix(p11,p12,p13,p21);
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 extern FechaHora FH;
JuanManuelAmador 0:3d456b8ce449 10
JuanManuelAmador 0:3d456b8ce449 11 extern DigitalOut myled;
JuanManuelAmador 0:3d456b8ce449 12 extern DigitalIn boton5;
JuanManuelAmador 0:3d456b8ce449 13 extern DigitalIn boton6;
JuanManuelAmador 0:3d456b8ce449 14
JuanManuelAmador 0:3d456b8ce449 15 extern Timer t; // Temporizador usado para controlar la animación de la pantalla
JuanManuelAmador 0:3d456b8ce449 16
JuanManuelAmador 0:3d456b8ce449 17 NuevoViaje::NuevoViaje(char newtitle[], char newsubtitle[], char newmsg11[], char newmsg12[], char newmsg2[]){
JuanManuelAmador 0:3d456b8ce449 18 strcpy(title, newtitle);
JuanManuelAmador 0:3d456b8ce449 19 strcpy(subtitle, newsubtitle);
JuanManuelAmador 0:3d456b8ce449 20 strcpy(msg11, newmsg11);
JuanManuelAmador 0:3d456b8ce449 21 strcpy(msg12, newmsg12);
JuanManuelAmador 0:3d456b8ce449 22 strcpy(msg2, newmsg2);
JuanManuelAmador 0:3d456b8ce449 23 }
JuanManuelAmador 0:3d456b8ce449 24
JuanManuelAmador 0:3d456b8ce449 25 void NuevoViaje::initialize(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 26 // Inicilización de las variables
JuanManuelAmador 0:3d456b8ce449 27 aXanterior = 0;
JuanManuelAmador 0:3d456b8ce449 28 aYanterior = 0;
JuanManuelAmador 0:3d456b8ce449 29 aZanterior = 0;
JuanManuelAmador 0:3d456b8ce449 30
JuanManuelAmador 0:3d456b8ce449 31 ContadorDatos = 0;
JuanManuelAmador 0:3d456b8ce449 32 pulsado5 = false;
JuanManuelAmador 0:3d456b8ce449 33 pulsado6 = false;
JuanManuelAmador 0:3d456b8ce449 34 leyendoDatos = false;
JuanManuelAmador 0:3d456b8ce449 35 PasoTiempo = 1.0e6/config.getVelocidadAdquisicion();
JuanManuelAmador 0:3d456b8ce449 36
JuanManuelAmador 0:3d456b8ce449 37 // select font to use:
JuanManuelAmador 0:3d456b8ce449 38 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 39
JuanManuelAmador 0:3d456b8ce449 40 // output title text
JuanManuelAmador 0:3d456b8ce449 41 lcd->XString( OFFSETX, OFFSETY, title);
JuanManuelAmador 0:3d456b8ce449 42
JuanManuelAmador 0:3d456b8ce449 43 lcd->XFont = xfont_8;
JuanManuelAmador 0:3d456b8ce449 44
JuanManuelAmador 0:3d456b8ce449 45 // output subtitle text
JuanManuelAmador 0:3d456b8ce449 46 char aux[MAXCAR*2];
JuanManuelAmador 0:3d456b8ce449 47 char aux2[MAXCAR];
JuanManuelAmador 0:3d456b8ce449 48 strcpy(aux, subtitle);
JuanManuelAmador 0:3d456b8ce449 49 config.getVelocidadAdquisicionString(aux2);
JuanManuelAmador 0:3d456b8ce449 50 strcat(aux, aux2);
JuanManuelAmador 0:3d456b8ce449 51 strcat(aux, " Hz");
JuanManuelAmador 0:3d456b8ce449 52 lcd->XString( OFFSETX, OFFSETY + 11, aux);
JuanManuelAmador 0:3d456b8ce449 53
JuanManuelAmador 0:3d456b8ce449 54 // output msg2 text
JuanManuelAmador 0:3d456b8ce449 55 lcd->XString( OFFSETX, HEIGHT -1 - 8, msg2);
JuanManuelAmador 0:3d456b8ce449 56
JuanManuelAmador 0:3d456b8ce449 57 // Se pinta el recuadro del gráfico animado
JuanManuelAmador 0:3d456b8ce449 58 lcd->Frame(POSX0, POSY0, POSX0 + WIDTHFRAME, POSY0 + HEIGHTFRAME);
JuanManuelAmador 0:3d456b8ce449 59
JuanManuelAmador 0:3d456b8ce449 60 // Se pinta el recuadro lleno que se moverá dentro dle recuadro pintado anteriormente
JuanManuelAmador 0:3d456b8ce449 61 lcd->Rect(POSX0 + 1, POSY0 + 1, POSX0 + 1 + WIDTHRECT, POSY0 + HEIGHTFRAME);
JuanManuelAmador 0:3d456b8ce449 62
JuanManuelAmador 0:3d456b8ce449 63 // Se inicializa el sentido de la animación (sentido en el que se mueve incialmente el recuadro
JuanManuelAmador 0:3d456b8ce449 64 posXF = POSX0 + 1 + WIDTHRECT;
JuanManuelAmador 0:3d456b8ce449 65 sentidoAnimacion = true;
JuanManuelAmador 0:3d456b8ce449 66
JuanManuelAmador 0:3d456b8ce449 67 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 68 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 69
JuanManuelAmador 0:3d456b8ce449 70 // se actualiza la fecha
JuanManuelAmador 0:3d456b8ce449 71 FH.update();
JuanManuelAmador 0:3d456b8ce449 72
JuanManuelAmador 0:3d456b8ce449 73 // El archivo donde se guardarán los datos es la fecha y hora con formato con la extensión .txt
JuanManuelAmador 0:3d456b8ce449 74 char fileName[64];
JuanManuelAmador 0:3d456b8ce449 75 char auxTime[64];
JuanManuelAmador 0:3d456b8ce449 76
JuanManuelAmador 0:3d456b8ce449 77 strcpy(auxTime, FH.getFechaHora());
JuanManuelAmador 0:3d456b8ce449 78 strcpy(fileName, "/usb/RAW");
JuanManuelAmador 0:3d456b8ce449 79 strcat(fileName, auxTime);
JuanManuelAmador 0:3d456b8ce449 80 strcat(fileName, ".txt");
JuanManuelAmador 0:3d456b8ce449 81
JuanManuelAmador 0:3d456b8ce449 82 // Se prepara el USB para escribir en él
JuanManuelAmador 0:3d456b8ce449 83 // Si el USB está desconectado se avisa del error
JuanManuelAmador 0:3d456b8ce449 84 if(msc.disk_initialize()){
JuanManuelAmador 0:3d456b8ce449 85 SC.changeScreen("USBdesconectado");
JuanManuelAmador 0:3d456b8ce449 86 }
JuanManuelAmador 0:3d456b8ce449 87
JuanManuelAmador 0:3d456b8ce449 88 // Se inicia el contador para comprobar si el USB se ha quedado colgado y se activa el ticker que cumple esta función
JuanManuelAmador 0:3d456b8ce449 89 //t.start();
JuanManuelAmador 0:3d456b8ce449 90 // Cada segundo se comprueba si el USB se ha quedado colgado (o no está conectado)
JuanManuelAmador 0:3d456b8ce449 91 //USBcolgado.attach(this, &NuevoViaje::compruebaUSB, 1);
JuanManuelAmador 0:3d456b8ce449 92
JuanManuelAmador 0:3d456b8ce449 93 fp = fopen(fileName, "w");
JuanManuelAmador 0:3d456b8ce449 94 if(fp == NULL){ // Si el USB está desconectado o lleno se avisa por pantalla y se vuelve al menú
JuanManuelAmador 0:3d456b8ce449 95 // Se desactiva y reseta el timer
JuanManuelAmador 0:3d456b8ce449 96 /*t.stop();
JuanManuelAmador 0:3d456b8ce449 97 t.reset();
JuanManuelAmador 0:3d456b8ce449 98 USBcolgado.detach();*/
JuanManuelAmador 0:3d456b8ce449 99 SC.changeScreen("USBdesconectado");
JuanManuelAmador 0:3d456b8ce449 100 }else{ // Si no se prepara el acelerómetro para comenzar con las lecturas
JuanManuelAmador 0:3d456b8ce449 101 // Se cargan los valores de calibración del acelerómetro
JuanManuelAmador 0:3d456b8ce449 102 ParametrosCalibracion::leerValores(valoresCal);
JuanManuelAmador 0:3d456b8ce449 103
JuanManuelAmador 0:3d456b8ce449 104 /*FILE* fp = fopen("/local/prueba2.txt","w");
JuanManuelAmador 0:3d456b8ce449 105 fprintf(fp, "%f\n%f\n%f\n%f\n%f\n%f\n", valoresCal[0], valoresCal[1], valoresCal[2], valoresCal[3], valoresCal[4], valoresCal[5]);
JuanManuelAmador 0:3d456b8ce449 106 fclose(fp);*/
JuanManuelAmador 0:3d456b8ce449 107
JuanManuelAmador 0:3d456b8ce449 108 // Se crean los buffer donde se guardarán los datos
JuanManuelAmador 0:3d456b8ce449 109 buff_aX = new Buffering();
JuanManuelAmador 0:3d456b8ce449 110 buff_aY = new Buffering();
JuanManuelAmador 0:3d456b8ce449 111 buff_aZ = new Buffering();
JuanManuelAmador 0:3d456b8ce449 112
JuanManuelAmador 0:3d456b8ce449 113 kionix.AcelerometroWakeUp();
JuanManuelAmador 0:3d456b8ce449 114 // Hasta que no está preparado no se muestra el mensaje de "OK para comenzar"
JuanManuelAmador 0:3d456b8ce449 115 // output msg11 text
JuanManuelAmador 0:3d456b8ce449 116 // select font to use:
JuanManuelAmador 0:3d456b8ce449 117 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 118 lcd->XString(OFFSETX, HEIGHT -1 - 8 - 11, msg11); // Se pinta más arriba para que haya más espacio
JuanManuelAmador 0:3d456b8ce449 119
JuanManuelAmador 0:3d456b8ce449 120 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 121 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 122 }
JuanManuelAmador 0:3d456b8ce449 123
JuanManuelAmador 0:3d456b8ce449 124 // Debug
JuanManuelAmador 0:3d456b8ce449 125 //llamadasTicker = 0;
JuanManuelAmador 0:3d456b8ce449 126 }
JuanManuelAmador 0:3d456b8ce449 127
JuanManuelAmador 0:3d456b8ce449 128 void NuevoViaje::update(DogMLCD* lcd){
JuanManuelAmador 0:3d456b8ce449 129 // ANIMACIÓN
JuanManuelAmador 0:3d456b8ce449 130 // Si se están leyendo datos
JuanManuelAmador 0:3d456b8ce449 131 if(leyendoDatos){
JuanManuelAmador 0:3d456b8ce449 132 if(t.read_ms() >= UPDATETIME){
JuanManuelAmador 0:3d456b8ce449 133 // Se procede de forma distinta según el sentido de movimiento del recuadro
JuanManuelAmador 0:3d456b8ce449 134 if(sentidoAnimacion){ // Derecha
JuanManuelAmador 0:3d456b8ce449 135 // Se pinta la siguiente columna del recuadro
JuanManuelAmador 0:3d456b8ce449 136 lcd->LineV(posXF + 1, POSY0 + 1, POSY0 + HEIGHTFRAME-1);
JuanManuelAmador 0:3d456b8ce449 137
JuanManuelAmador 0:3d456b8ce449 138 // Se borra la correspondiente para que el recuadro siga teniendo el mismo tamaño
JuanManuelAmador 0:3d456b8ce449 139 lcd->LineV(posXF - WIDTHRECT, POSY0 + 1, POSY0 + HEIGHTFRAME-1, wipe);
JuanManuelAmador 0:3d456b8ce449 140 posXF++;
JuanManuelAmador 0:3d456b8ce449 141
JuanManuelAmador 0:3d456b8ce449 142 // Si se ha llegado al final del frame, se cambia de sentido y se sitúa la variable posXF en la izquierda del recuadro animado
JuanManuelAmador 0:3d456b8ce449 143 if(posXF >= POSX0 + WIDTHFRAME - 1){
JuanManuelAmador 0:3d456b8ce449 144 sentidoAnimacion = false;
JuanManuelAmador 0:3d456b8ce449 145 posXF = POSX0 + WIDTHFRAME - WIDTHRECT;
JuanManuelAmador 0:3d456b8ce449 146 }
JuanManuelAmador 0:3d456b8ce449 147 }else{ // Izquierda
JuanManuelAmador 0:3d456b8ce449 148 // Se pinta la siguiente columna del recuadro
JuanManuelAmador 0:3d456b8ce449 149 lcd->LineV(posXF - 1, POSY0 + 1, POSY0 + HEIGHTFRAME-1);
JuanManuelAmador 0:3d456b8ce449 150
JuanManuelAmador 0:3d456b8ce449 151 // Se borra la correspondiente para que el recuadro siga teniendo el mismo tamaño
JuanManuelAmador 0:3d456b8ce449 152 lcd->LineV(posXF + WIDTHRECT - 1, POSY0 + 1, POSY0 + HEIGHTFRAME-1, wipe);
JuanManuelAmador 0:3d456b8ce449 153 posXF--;
JuanManuelAmador 0:3d456b8ce449 154
JuanManuelAmador 0:3d456b8ce449 155 // Si se ha llegado al final del frame, se cambia de sentido y se sitúa la variable posXF en la derecha del recudro animado
JuanManuelAmador 0:3d456b8ce449 156 if(posXF <= POSX0 + 2){
JuanManuelAmador 0:3d456b8ce449 157 sentidoAnimacion = true;
JuanManuelAmador 0:3d456b8ce449 158 posXF = POSX0 + 1 + WIDTHRECT;
JuanManuelAmador 0:3d456b8ce449 159 }
JuanManuelAmador 0:3d456b8ce449 160 }
JuanManuelAmador 0:3d456b8ce449 161
JuanManuelAmador 0:3d456b8ce449 162 // Se envía a la pantalla la actualización(tener cuidado con las páginas que se envían)
JuanManuelAmador 0:3d456b8ce449 163 lcd->Flush(3, 0, posXF+WIDTHRECT+1);
JuanManuelAmador 0:3d456b8ce449 164 lcd->Flush(4, 0, posXF+WIDTHRECT+1);
JuanManuelAmador 0:3d456b8ce449 165
JuanManuelAmador 0:3d456b8ce449 166 // Se resetea el contador
JuanManuelAmador 0:3d456b8ce449 167 t.reset();
JuanManuelAmador 0:3d456b8ce449 168 }
JuanManuelAmador 0:3d456b8ce449 169 }
JuanManuelAmador 0:3d456b8ce449 170
JuanManuelAmador 0:3d456b8ce449 171 if(boton5 == 1){
JuanManuelAmador 0:3d456b8ce449 172 pulsado5 = true;
JuanManuelAmador 0:3d456b8ce449 173 }else{
JuanManuelAmador 0:3d456b8ce449 174 if(pulsado5 == true){ // El boton ha sido pulsado
JuanManuelAmador 0:3d456b8ce449 175 pulsado5 = false;
JuanManuelAmador 0:3d456b8ce449 176 if(!leyendoDatos){ // Si el viaje no habia comenzado
JuanManuelAmador 0:3d456b8ce449 177 // Primero hay que comprobar si el USB está desconectado
JuanManuelAmador 0:3d456b8ce449 178 leyendoDatos = true;
JuanManuelAmador 0:3d456b8ce449 179 // Se inicia el timer que controlará el temporizador
JuanManuelAmador 0:3d456b8ce449 180 t.reset();
JuanManuelAmador 0:3d456b8ce449 181 t.start();
JuanManuelAmador 0:3d456b8ce449 182
JuanManuelAmador 0:3d456b8ce449 183 // Debug
JuanManuelAmador 0:3d456b8ce449 184 /*time.reset();
JuanManuelAmador 0:3d456b8ce449 185 time.start();*/
JuanManuelAmador 0:3d456b8ce449 186
JuanManuelAmador 0:3d456b8ce449 187 // Se comienza a leer el acelerómetro
JuanManuelAmador 0:3d456b8ce449 188 tickerLectura.attach_us(this, &NuevoViaje::LeeAcelerometroBuffer, PasoTiempo);
JuanManuelAmador 0:3d456b8ce449 189 // Se cambia el mensaje 11 por el 12
JuanManuelAmador 0:3d456b8ce449 190 // para ello se pinta un rectángulo vacío en la posición de los caracteres anteriores y se pinta encima los nuevos caracteres
JuanManuelAmador 0:3d456b8ce449 191 int y0 = HEIGHT -1 - 8 - 11;
JuanManuelAmador 0:3d456b8ce449 192 for(int i = 0; i < WIDTH; i++){
JuanManuelAmador 0:3d456b8ce449 193 for(int k = y0; k < (y0 + 11); k++){
JuanManuelAmador 0:3d456b8ce449 194 lcd->Wipe(i,k);
JuanManuelAmador 0:3d456b8ce449 195 }
JuanManuelAmador 0:3d456b8ce449 196 }
JuanManuelAmador 0:3d456b8ce449 197
JuanManuelAmador 0:3d456b8ce449 198 // select font to use:
JuanManuelAmador 0:3d456b8ce449 199 lcd->XFont = xfont_11;
JuanManuelAmador 0:3d456b8ce449 200
JuanManuelAmador 0:3d456b8ce449 201 // output msg11 text
JuanManuelAmador 0:3d456b8ce449 202 lcd->XString( OFFSETX, HEIGHT -1 - 8 - 11, msg12); // Se pinta más arriba para que haya más espacio
JuanManuelAmador 0:3d456b8ce449 203
JuanManuelAmador 0:3d456b8ce449 204 // transmit work screen to physical screen:
JuanManuelAmador 0:3d456b8ce449 205 lcd->Flush();
JuanManuelAmador 0:3d456b8ce449 206 }else{ // Si el viaje estaba en curso y se desea finalizar
JuanManuelAmador 0:3d456b8ce449 207
JuanManuelAmador 0:3d456b8ce449 208 // Se duerme el acelerómetro
JuanManuelAmador 0:3d456b8ce449 209 kionix.AcelerometroSleep();
JuanManuelAmador 0:3d456b8ce449 210 tickerLectura.detach();
JuanManuelAmador 0:3d456b8ce449 211
JuanManuelAmador 0:3d456b8ce449 212 fclose(fp); //cierra fichero con datos en el USB
JuanManuelAmador 0:3d456b8ce449 213 // Se deja libre la memoria de los buffer
JuanManuelAmador 0:3d456b8ce449 214 delete buff_aX;
JuanManuelAmador 0:3d456b8ce449 215 delete buff_aY;
JuanManuelAmador 0:3d456b8ce449 216 delete buff_aZ;
JuanManuelAmador 0:3d456b8ce449 217
JuanManuelAmador 0:3d456b8ce449 218 // Se para el temporizador
JuanManuelAmador 0:3d456b8ce449 219 t.stop();
JuanManuelAmador 0:3d456b8ce449 220
JuanManuelAmador 0:3d456b8ce449 221 // Debug
JuanManuelAmador 0:3d456b8ce449 222 //time.stop();
JuanManuelAmador 0:3d456b8ce449 223
JuanManuelAmador 0:3d456b8ce449 224 // Debug
JuanManuelAmador 0:3d456b8ce449 225 /*FILE* fp = fopen("/local/prueba3.txt","w");
JuanManuelAmador 0:3d456b8ce449 226 fprintf(fp, "%d, %d", ContadorDatos, llamadasTicker);
JuanManuelAmador 0:3d456b8ce449 227 fclose(fp); */
JuanManuelAmador 0:3d456b8ce449 228
JuanManuelAmador 0:3d456b8ce449 229 // Se pasa a la pantalla de guardado del viaje
JuanManuelAmador 0:3d456b8ce449 230 SC.changeScreen("archivoGuardado");
JuanManuelAmador 0:3d456b8ce449 231 }
JuanManuelAmador 0:3d456b8ce449 232 }
JuanManuelAmador 0:3d456b8ce449 233 }
JuanManuelAmador 0:3d456b8ce449 234
JuanManuelAmador 0:3d456b8ce449 235 // Botón atrás
JuanManuelAmador 0:3d456b8ce449 236 if(boton6 == 1){
JuanManuelAmador 0:3d456b8ce449 237 pulsado6 = true;
JuanManuelAmador 0:3d456b8ce449 238 }else{
JuanManuelAmador 0:3d456b8ce449 239 if(pulsado6 == true){
JuanManuelAmador 0:3d456b8ce449 240 pulsado6 = false;
JuanManuelAmador 0:3d456b8ce449 241 // Solo se volverá al menú si el viaje no está en proceso
JuanManuelAmador 0:3d456b8ce449 242 if(!leyendoDatos){
JuanManuelAmador 0:3d456b8ce449 243 fclose(fp); //cierra fichero con datos en el USB
JuanManuelAmador 0:3d456b8ce449 244 // Se duerme el acelerómetro
JuanManuelAmador 0:3d456b8ce449 245 kionix.AcelerometroSleep();
JuanManuelAmador 0:3d456b8ce449 246 // Se deja libre la memoria de los buffer
JuanManuelAmador 0:3d456b8ce449 247 delete buff_aX;
JuanManuelAmador 0:3d456b8ce449 248 delete buff_aY;
JuanManuelAmador 0:3d456b8ce449 249 delete buff_aZ;
JuanManuelAmador 0:3d456b8ce449 250 SC.changeScreen("menu");
JuanManuelAmador 0:3d456b8ce449 251 }
JuanManuelAmador 0:3d456b8ce449 252
JuanManuelAmador 0:3d456b8ce449 253 }
JuanManuelAmador 0:3d456b8ce449 254 }
JuanManuelAmador 0:3d456b8ce449 255 // Siempre que existan datos por guardar, se guardan en el USB
JuanManuelAmador 0:3d456b8ce449 256 GuardaDatosBuffer();
JuanManuelAmador 0:3d456b8ce449 257 }
JuanManuelAmador 0:3d456b8ce449 258
JuanManuelAmador 0:3d456b8ce449 259 void NuevoViaje::LeeAcelerometroBuffer()
JuanManuelAmador 0:3d456b8ce449 260 {
JuanManuelAmador 0:3d456b8ce449 261 // Debug
JuanManuelAmador 0:3d456b8ce449 262 //llamadasTicker++;
JuanManuelAmador 0:3d456b8ce449 263
JuanManuelAmador 0:3d456b8ce449 264 kionix.ReadAccels_KXR94(readings);
JuanManuelAmador 0:3d456b8ce449 265
JuanManuelAmador 0:3d456b8ce449 266 aaX = (int16_t)readings[0];
JuanManuelAmador 0:3d456b8ce449 267 aaY = (int16_t)readings[1];
JuanManuelAmador 0:3d456b8ce449 268 aaZ = (int16_t)readings[2];
JuanManuelAmador 0:3d456b8ce449 269
JuanManuelAmador 0:3d456b8ce449 270 buff_aX->put(aaX);
JuanManuelAmador 0:3d456b8ce449 271 buff_aY->put(aaY);
JuanManuelAmador 0:3d456b8ce449 272 buff_aZ->put(aaZ);
JuanManuelAmador 0:3d456b8ce449 273 }
JuanManuelAmador 0:3d456b8ce449 274
JuanManuelAmador 0:3d456b8ce449 275 void NuevoViaje::GuardaDatosBuffer()
JuanManuelAmador 0:3d456b8ce449 276 {
JuanManuelAmador 0:3d456b8ce449 277 bool empty = buff_aX->isEmpty();
JuanManuelAmador 0:3d456b8ce449 278
JuanManuelAmador 0:3d456b8ce449 279 int dif; //Diferencia entre writting index y riding index. El buffer se llena cuando esta diferencia alcanza el tamaño del buffer
JuanManuelAmador 0:3d456b8ce449 280 float tiempo; //Tiempo en segundos
JuanManuelAmador 0:3d456b8ce449 281
JuanManuelAmador 0:3d456b8ce449 282 if(empty == false)
JuanManuelAmador 0:3d456b8ce449 283 {
JuanManuelAmador 0:3d456b8ce449 284 aXr = buff_aX->get();
JuanManuelAmador 0:3d456b8ce449 285 aYr = buff_aY->get();
JuanManuelAmador 0:3d456b8ce449 286 aZr = buff_aZ->get();
JuanManuelAmador 0:3d456b8ce449 287
JuanManuelAmador 0:3d456b8ce449 288 // Debug
JuanManuelAmador 0:3d456b8ce449 289 // Usar las líneas de código inferiores para depurar el buffering
JuanManuelAmador 0:3d456b8ce449 290 /*int wi = buff_aX->getWritingIndex();
JuanManuelAmador 0:3d456b8ce449 291 int ri = buff_aX->getReadingIndex();
JuanManuelAmador 0:3d456b8ce449 292 int dif = buff_aX->getDif();*/
JuanManuelAmador 0:3d456b8ce449 293
JuanManuelAmador 0:3d456b8ce449 294 aX = (-1.0)*((float)aXr-(valoresCal[0]))*valoresCal[3];
JuanManuelAmador 0:3d456b8ce449 295 aY = (-1.0)*((float)aYr-(valoresCal[1]))*valoresCal[4];
JuanManuelAmador 0:3d456b8ce449 296 aZ = (-1.0)*((float)aZr-(valoresCal[2]))*valoresCal[5];
JuanManuelAmador 0:3d456b8ce449 297 // Para evitar algunos fallos por saturación todo valor mayor que 20 se le da el valor del punto anterior
JuanManuelAmador 0:3d456b8ce449 298 if(aX > 20.0){
JuanManuelAmador 0:3d456b8ce449 299 aX = aXanterior;
JuanManuelAmador 0:3d456b8ce449 300 }
JuanManuelAmador 0:3d456b8ce449 301 if(aY > 20.0){
JuanManuelAmador 0:3d456b8ce449 302 aY = aYanterior;
JuanManuelAmador 0:3d456b8ce449 303 }
JuanManuelAmador 0:3d456b8ce449 304 if(aZ > 20.0){
JuanManuelAmador 0:3d456b8ce449 305 aZ = aZanterior;
JuanManuelAmador 0:3d456b8ce449 306 }
JuanManuelAmador 0:3d456b8ce449 307
JuanManuelAmador 0:3d456b8ce449 308 // También se debe calcular la saturación en 0, por ello si un valor es menor (en valor absoluto)
JuanManuelAmador 0:3d456b8ce449 309 // que la precisión del acelerómetro se le da también el valor del punto anterior
JuanManuelAmador 0:3d456b8ce449 310 if(aX*1000 == 0.0000 ){
JuanManuelAmador 0:3d456b8ce449 311 aX = aXanterior;
JuanManuelAmador 0:3d456b8ce449 312 }
JuanManuelAmador 0:3d456b8ce449 313 if(aY*1000 == 0.0000){
JuanManuelAmador 0:3d456b8ce449 314 aY = aYanterior;
JuanManuelAmador 0:3d456b8ce449 315 }
JuanManuelAmador 0:3d456b8ce449 316 if(aZ*1000 == 0.0000){
JuanManuelAmador 0:3d456b8ce449 317 aZ = aZanterior;
JuanManuelAmador 0:3d456b8ce449 318 }
JuanManuelAmador 0:3d456b8ce449 319
JuanManuelAmador 0:3d456b8ce449 320 aXanterior = aX;
JuanManuelAmador 0:3d456b8ce449 321 aYanterior = aY;
JuanManuelAmador 0:3d456b8ce449 322 aZanterior = aZ;
JuanManuelAmador 0:3d456b8ce449 323
JuanManuelAmador 0:3d456b8ce449 324
JuanManuelAmador 0:3d456b8ce449 325 tiempo = ((float)ContadorDatos)*((float)PasoTiempo)/1.0e6;
JuanManuelAmador 0:3d456b8ce449 326 ContadorDatos++;
JuanManuelAmador 0:3d456b8ce449 327
JuanManuelAmador 0:3d456b8ce449 328 //if(fprintf(fp,"%f %f %f %f\n", tiempo, aXr, aYr, aZr) < 0){ // Pruebas
JuanManuelAmador 0:3d456b8ce449 329 if(fprintf(fp,"%f %f %f %f\n", tiempo, aX, aY, aZ) < 0){
JuanManuelAmador 0:3d456b8ce449 330 //if(fprintf(fp,"%f\n", tiempo) < 0){ // Pruebas
JuanManuelAmador 0:3d456b8ce449 331 //if(fprintf(fp,"%f %f %f %f %d %d %d\n", tiempo, aX, aY, aZ, wi, ri, dif) < 0){ // pruebas
JuanManuelAmador 0:3d456b8ce449 332 //if(fprintf(fp,"%d %f %f %f %d %d %d\n", time.read_us(), aX, aY, aZ, wi, ri, dif) < 0){ // pruebas
JuanManuelAmador 0:3d456b8ce449 333 //if(fprintf(fp,"%f %f %f %f %d %d %d\n", tiempo, aX, aY, aZ, llamadasTicker, ContadorDatos, llamadasTicker-ContadorDatos) < 0){ // pruebas
JuanManuelAmador 0:3d456b8ce449 334 // Si se sigue estando en la pantalla de NuevoViaje se aborta la lectura de datos y se muestra por pantalla que el USB ha sido desconectado
JuanManuelAmador 0:3d456b8ce449 335 if(strcmp(SC.getCurrentScreen(), "viaje") == 0){
JuanManuelAmador 0:3d456b8ce449 336
JuanManuelAmador 0:3d456b8ce449 337 // Se duerme el acelerómetro
JuanManuelAmador 0:3d456b8ce449 338 kionix.AcelerometroSleep();
JuanManuelAmador 0:3d456b8ce449 339 tickerLectura.detach();
JuanManuelAmador 0:3d456b8ce449 340 fclose(fp); //cierra fichero con datos en el USB
JuanManuelAmador 0:3d456b8ce449 341 // Se deja libre la memoria de los buffer
JuanManuelAmador 0:3d456b8ce449 342 delete buff_aX;
JuanManuelAmador 0:3d456b8ce449 343 delete buff_aY;
JuanManuelAmador 0:3d456b8ce449 344 delete buff_aZ;
JuanManuelAmador 0:3d456b8ce449 345 myled = 1;
JuanManuelAmador 0:3d456b8ce449 346 SC.changeScreen("USBdesconectado");
JuanManuelAmador 0:3d456b8ce449 347 }
JuanManuelAmador 0:3d456b8ce449 348 }
JuanManuelAmador 0:3d456b8ce449 349
JuanManuelAmador 0:3d456b8ce449 350 // Debug
JuanManuelAmador 0:3d456b8ce449 351 // Código para ralentizar la mbed
JuanManuelAmador 0:3d456b8ce449 352 /*for(int i = 0; i< 10000000; i++){
JuanManuelAmador 0:3d456b8ce449 353 int prueba34 = prueba34*prueba34/17*23425434;
JuanManuelAmador 0:3d456b8ce449 354 }*/
JuanManuelAmador 0:3d456b8ce449 355 }
JuanManuelAmador 0:3d456b8ce449 356 }
JuanManuelAmador 0:3d456b8ce449 357
JuanManuelAmador 0:3d456b8ce449 358
JuanManuelAmador 0:3d456b8ce449 359
JuanManuelAmador 0:3d456b8ce449 360