Versión sin post-procesado del software del VmRideR
Dependencies: mbed
Pantallas/NuevoViaje.cpp@0:3d456b8ce449, 2015-06-15 (annotated)
- Committer:
- JuanManuelAmador
- Date:
- Mon Jun 15 15:34:27 2015 +0000
- Revision:
- 0:3d456b8ce449
prueba
Who changed what in which revision?
User | Revision | Line number | New 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 |