Programa mbed1 excelencia
Dependencies: mbed
excelenciaSP1.cpp@0:a5908bca4740, 2017-01-18 (annotated)
- Committer:
- JuanManuelAmador
- Date:
- Wed Jan 18 12:58:15 2017 +0000
- Revision:
- 0:a5908bca4740
primer commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JuanManuelAmador | 0:a5908bca4740 | 1 | /*************************************** |
JuanManuelAmador | 0:a5908bca4740 | 2 | VIRTUALMECH |
JuanManuelAmador | 0:a5908bca4740 | 3 | Autor: Juan Manuel Amador Olivares |
JuanManuelAmador | 0:a5908bca4740 | 4 | Fecha: 16/9/2015 |
JuanManuelAmador | 0:a5908bca4740 | 5 | ***************************************/ |
JuanManuelAmador | 0:a5908bca4740 | 6 | |
JuanManuelAmador | 0:a5908bca4740 | 7 | /*************************************** |
JuanManuelAmador | 0:a5908bca4740 | 8 | Adquisición de datos IMU y Láser |
JuanManuelAmador | 0:a5908bca4740 | 9 | ***************************************/ |
JuanManuelAmador | 0:a5908bca4740 | 10 | #include "mbed.h" |
JuanManuelAmador | 0:a5908bca4740 | 11 | #include "Buffering.h" |
JuanManuelAmador | 0:a5908bca4740 | 12 | #include "BufferBig.h" |
JuanManuelAmador | 0:a5908bca4740 | 13 | #include "Bufferinguint.h" |
JuanManuelAmador | 0:a5908bca4740 | 14 | |
JuanManuelAmador | 0:a5908bca4740 | 15 | #define TAMPAQUETEIMU 34 // Tamaño del paquete recibido de la IMU |
JuanManuelAmador | 0:a5908bca4740 | 16 | #define TAMENVIOIMU 30 // Tamaño del paquete enviado al PC con los datos de la IMU |
JuanManuelAmador | 0:a5908bca4740 | 17 | #define TAMENVIOLASER 8 // Tamaño del paquete enviado al PC con los datos del sensor de distancia |
JuanManuelAmador | 0:a5908bca4740 | 18 | |
JuanManuelAmador | 0:a5908bca4740 | 19 | /******************** |
JuanManuelAmador | 0:a5908bca4740 | 20 | Funciones |
JuanManuelAmador | 0:a5908bca4740 | 21 | ********************/ |
JuanManuelAmador | 0:a5908bca4740 | 22 | void startStreamingIMU(); // Manda los bytes a la IMU necesarios para que comience a enviar datos por streaming |
JuanManuelAmador | 0:a5908bca4740 | 23 | void envioPaquete(unsigned char paquete[], int nElementos); // Envía por el puerto serie un paquete de datos |
JuanManuelAmador | 0:a5908bca4740 | 24 | void envioDatos(); // Envio al PC los bytes de datos cuando es posible |
JuanManuelAmador | 0:a5908bca4740 | 25 | void flushSerialBuffer1(void); |
JuanManuelAmador | 0:a5908bca4740 | 26 | void flushSerialBuffer2(void); |
JuanManuelAmador | 0:a5908bca4740 | 27 | void flushSerialBuffer3(void); |
JuanManuelAmador | 0:a5908bca4740 | 28 | /********************/ |
JuanManuelAmador | 0:a5908bca4740 | 29 | |
JuanManuelAmador | 0:a5908bca4740 | 30 | DigitalOut led(LED1); // Led indicador. Se enciende cuando se están adquiriendo datos |
JuanManuelAmador | 0:a5908bca4740 | 31 | |
JuanManuelAmador | 0:a5908bca4740 | 32 | // Puertos UART a utilizar |
JuanManuelAmador | 0:a5908bca4740 | 33 | Serial pLaser(p9, p10); |
JuanManuelAmador | 0:a5908bca4740 | 34 | Serial pIMU(p28, p27); |
JuanManuelAmador | 0:a5908bca4740 | 35 | Serial pIMU2(p13, p14); |
JuanManuelAmador | 0:a5908bca4740 | 36 | Serial pc(USBTX, USBRX); |
JuanManuelAmador | 0:a5908bca4740 | 37 | |
JuanManuelAmador | 0:a5908bca4740 | 38 | // Temporizador para el control del tiempo |
JuanManuelAmador | 0:a5908bca4740 | 39 | Timer t; |
JuanManuelAmador | 0:a5908bca4740 | 40 | unsigned int auxtime = 0; // Variable auxiliar para la lectura del tiempo |
JuanManuelAmador | 0:a5908bca4740 | 41 | unsigned char byteIN, byteINanterior, byteINbuff, byteINanteriorbuff; // Variables auxiliares para guardar bytes recibidos de la IMU |
JuanManuelAmador | 0:a5908bca4740 | 42 | unsigned char byteIN2, byteINanterior2, byteINbuff2, byteINanteriorbuff2; // Variables auxiliares para guardar bytes recibidos de la IMU2 |
JuanManuelAmador | 0:a5908bca4740 | 43 | unsigned char byteINL, byteINbuffL; // Variable auxiliar para guardar bytes recibidos del laser |
JuanManuelAmador | 0:a5908bca4740 | 44 | |
JuanManuelAmador | 0:a5908bca4740 | 45 | // Variables para la reconstrucción de los datos de la IMU |
JuanManuelAmador | 0:a5908bca4740 | 46 | unsigned int nBytes = TAMPAQUETEIMU; |
JuanManuelAmador | 0:a5908bca4740 | 47 | unsigned char paqueteEnvio[TAMENVIOIMU]; // 12 bytes para las aceleraciones (bytes cada eje) y otros 4 para la marca de tiempo y otros 12 para las velocidades angulares más un byte 'i' que indica que es el paquete de una IMU |
JuanManuelAmador | 0:a5908bca4740 | 48 | |
JuanManuelAmador | 0:a5908bca4740 | 49 | // Variables para la reconstrucción de los datos de la IMU2 |
JuanManuelAmador | 0:a5908bca4740 | 50 | unsigned int nBytes2 = TAMPAQUETEIMU; |
JuanManuelAmador | 0:a5908bca4740 | 51 | unsigned char paqueteEnvio2[TAMENVIOIMU]; // 12 bytes para las aceleraciones (bytes cada eje) y otros 4 para la marca de tiempo y otros 12 para las velocidades angulares más un byte 'i' que indica que es el paquete de una IMU2 |
JuanManuelAmador | 0:a5908bca4740 | 52 | /*union datoCompuesto{ |
JuanManuelAmador | 0:a5908bca4740 | 53 | char B[4]; |
JuanManuelAmador | 0:a5908bca4740 | 54 | float unidos; |
JuanManuelAmador | 0:a5908bca4740 | 55 | } dato;*/ |
JuanManuelAmador | 0:a5908bca4740 | 56 | |
JuanManuelAmador | 0:a5908bca4740 | 57 | // Variables para la reconstrucción datos del láser |
JuanManuelAmador | 0:a5908bca4740 | 58 | unsigned int distancia; // Sólo se usarán los 2 bytes menos significativos |
JuanManuelAmador | 0:a5908bca4740 | 59 | unsigned char paqueteEnvioL[TAMENVIOLASER]; |
JuanManuelAmador | 0:a5908bca4740 | 60 | char fbyte = 0; // Indica si el byte leído es el primero delos dos enviados por el láser (tomando valor true) o el segundo (tomando valor false) |
JuanManuelAmador | 0:a5908bca4740 | 61 | |
JuanManuelAmador | 0:a5908bca4740 | 62 | // Buffers dónde se guardarán los bytes provenientes de los sensores |
JuanManuelAmador | 0:a5908bca4740 | 63 | Buffering IMUbuff; |
JuanManuelAmador | 0:a5908bca4740 | 64 | Bufferinguint IMUtime; |
JuanManuelAmador | 0:a5908bca4740 | 65 | Buffering IMUbuff2; |
JuanManuelAmador | 0:a5908bca4740 | 66 | Bufferinguint IMUtime2; |
JuanManuelAmador | 0:a5908bca4740 | 67 | Buffering LASERbuff; |
JuanManuelAmador | 0:a5908bca4740 | 68 | Bufferinguint LASERtime; |
JuanManuelAmador | 0:a5908bca4740 | 69 | |
JuanManuelAmador | 0:a5908bca4740 | 70 | // Buffer dónde se guardarán los datos antes de ser enviados |
JuanManuelAmador | 0:a5908bca4740 | 71 | BufferBig envioBuff; |
JuanManuelAmador | 0:a5908bca4740 | 72 | char continuaEnviando; |
JuanManuelAmador | 0:a5908bca4740 | 73 | |
JuanManuelAmador | 0:a5908bca4740 | 74 | // Variables semáforo para que no se mezclen los bytes de distintos paquetes |
JuanManuelAmador | 0:a5908bca4740 | 75 | // Estas variables indican de que sensor se pueden leer y procesar los bytes de los paquetes recibidos. |
JuanManuelAmador | 0:a5908bca4740 | 76 | // Independientemente de estas variables se recibirán los bytes de los distintos sensores, que se irán guardando en sus respectivos buffer, |
JuanManuelAmador | 0:a5908bca4740 | 77 | // y se irá guardando la marca de tiempo cuando se detecte la llegada de un nuevo paquete. |
JuanManuelAmador | 0:a5908bca4740 | 78 | bool enviandoIMU = false; |
JuanManuelAmador | 0:a5908bca4740 | 79 | bool enviandoIMU2 = false; |
JuanManuelAmador | 0:a5908bca4740 | 80 | bool enviandoLASER = false; |
JuanManuelAmador | 0:a5908bca4740 | 81 | bool adquiriendo = false; |
JuanManuelAmador | 0:a5908bca4740 | 82 | |
JuanManuelAmador | 0:a5908bca4740 | 83 | // Variable de control de bytes enviados |
JuanManuelAmador | 0:a5908bca4740 | 84 | unsigned int bytesEnviados; |
JuanManuelAmador | 0:a5908bca4740 | 85 | unsigned int selIMUleer; |
JuanManuelAmador | 0:a5908bca4740 | 86 | |
JuanManuelAmador | 0:a5908bca4740 | 87 | int main() { |
JuanManuelAmador | 0:a5908bca4740 | 88 | // Inicialización de puertos UART |
JuanManuelAmador | 0:a5908bca4740 | 89 | pc.baud(921600); // Configuración del puerto conectado al PC |
JuanManuelAmador | 0:a5908bca4740 | 90 | pIMU.baud(460800); // Configuración del puerto conectado a la IMU |
JuanManuelAmador | 0:a5908bca4740 | 91 | pIMU2.baud(460800); // Configuración del puerto conectado a la IMU2 |
JuanManuelAmador | 0:a5908bca4740 | 92 | pLaser.baud(115200); // Configuración del puerto conectado al sensor de distancia |
JuanManuelAmador | 0:a5908bca4740 | 93 | |
JuanManuelAmador | 0:a5908bca4740 | 94 | //pc.printf("Listo para recibir datos.\n\r"); |
JuanManuelAmador | 0:a5908bca4740 | 95 | |
JuanManuelAmador | 0:a5908bca4740 | 96 | while(1) { // Bucle infinito |
JuanManuelAmador | 0:a5908bca4740 | 97 | // Se comprueba la llegada de nuevos bytes procedentes del PC |
JuanManuelAmador | 0:a5908bca4740 | 98 | if(pc.readable()){ |
JuanManuelAmador | 0:a5908bca4740 | 99 | char c = pc.getc(); // Se lee el byte |
JuanManuelAmador | 0:a5908bca4740 | 100 | if(c == 'a'){ // Si es el carácter 'a', indica el inicio de la adquisición |
JuanManuelAmador | 0:a5908bca4740 | 101 | adquiriendo = true; |
JuanManuelAmador | 0:a5908bca4740 | 102 | t.reset(); |
JuanManuelAmador | 0:a5908bca4740 | 103 | t.start(); |
JuanManuelAmador | 0:a5908bca4740 | 104 | startStreamingIMU(); |
JuanManuelAmador | 0:a5908bca4740 | 105 | bytesEnviados = 0; |
JuanManuelAmador | 0:a5908bca4740 | 106 | led = 1; |
JuanManuelAmador | 0:a5908bca4740 | 107 | }else if(c == 's'){ // Si es el carácter 'a', indica el final de la adquisición |
JuanManuelAmador | 0:a5908bca4740 | 108 | adquiriendo = false; |
JuanManuelAmador | 0:a5908bca4740 | 109 | led = 0; |
JuanManuelAmador | 0:a5908bca4740 | 110 | t.stop(); |
JuanManuelAmador | 0:a5908bca4740 | 111 | t.reset(); |
JuanManuelAmador | 0:a5908bca4740 | 112 | |
JuanManuelAmador | 0:a5908bca4740 | 113 | // Puertos serie |
JuanManuelAmador | 0:a5908bca4740 | 114 | flushSerialBuffer1(); |
JuanManuelAmador | 0:a5908bca4740 | 115 | flushSerialBuffer2(); |
JuanManuelAmador | 0:a5908bca4740 | 116 | flushSerialBuffer3(); |
JuanManuelAmador | 0:a5908bca4740 | 117 | |
JuanManuelAmador | 0:a5908bca4740 | 118 | // Buffer en RAM de mbed |
JuanManuelAmador | 0:a5908bca4740 | 119 | while(!IMUbuff.isEmpty()){ |
JuanManuelAmador | 0:a5908bca4740 | 120 | IMUbuff.get(); |
JuanManuelAmador | 0:a5908bca4740 | 121 | } |
JuanManuelAmador | 0:a5908bca4740 | 122 | while(!IMUtime.isEmpty()){ |
JuanManuelAmador | 0:a5908bca4740 | 123 | IMUtime.get(); |
JuanManuelAmador | 0:a5908bca4740 | 124 | } |
JuanManuelAmador | 0:a5908bca4740 | 125 | while(!IMUbuff2.isEmpty()){ |
JuanManuelAmador | 0:a5908bca4740 | 126 | IMUbuff2.get(); |
JuanManuelAmador | 0:a5908bca4740 | 127 | } |
JuanManuelAmador | 0:a5908bca4740 | 128 | while(!IMUtime2.isEmpty()){ |
JuanManuelAmador | 0:a5908bca4740 | 129 | IMUtime2.get(); |
JuanManuelAmador | 0:a5908bca4740 | 130 | } |
JuanManuelAmador | 0:a5908bca4740 | 131 | while(!LASERbuff.isEmpty()){ |
JuanManuelAmador | 0:a5908bca4740 | 132 | LASERbuff.get(); |
JuanManuelAmador | 0:a5908bca4740 | 133 | } |
JuanManuelAmador | 0:a5908bca4740 | 134 | while(!LASERtime.isEmpty()){ |
JuanManuelAmador | 0:a5908bca4740 | 135 | LASERtime.get(); |
JuanManuelAmador | 0:a5908bca4740 | 136 | } |
JuanManuelAmador | 0:a5908bca4740 | 137 | while(!envioBuff.isEmpty()){ |
JuanManuelAmador | 0:a5908bca4740 | 138 | envioBuff.get(); |
JuanManuelAmador | 0:a5908bca4740 | 139 | } |
JuanManuelAmador | 0:a5908bca4740 | 140 | /*pc.printf("\n\nBytes enviados: %u\n\n", bytesEnviados); |
JuanManuelAmador | 0:a5908bca4740 | 141 | pc.printf("\n\nDatos en el buffer de envio: %u, %u, %u, %u\n\n", envioBuff.getDif(),IMUbuff.getDif(), IMUbuff2.getDif(),LASERbuff.getDif());*/ |
JuanManuelAmador | 0:a5908bca4740 | 142 | } |
JuanManuelAmador | 0:a5908bca4740 | 143 | } |
JuanManuelAmador | 0:a5908bca4740 | 144 | if(adquiriendo){ // Sólo se reconstruye y envían datos cuando se ha iniciado la adquisición |
JuanManuelAmador | 0:a5908bca4740 | 145 | |
JuanManuelAmador | 0:a5908bca4740 | 146 | if(pIMU.readable()){ |
JuanManuelAmador | 0:a5908bca4740 | 147 | byteINanterior = byteIN; |
JuanManuelAmador | 0:a5908bca4740 | 148 | byteIN = pIMU.getc(); |
JuanManuelAmador | 0:a5908bca4740 | 149 | IMUbuff.put(byteIN); // Se guarda el byte en el buffer |
JuanManuelAmador | 0:a5908bca4740 | 150 | if(byteIN == 0x65 && byteINanterior == 0x75){// Si el byte recibido es un 75 en hex, este byte marca la llegada de una nueva medida |
JuanManuelAmador | 0:a5908bca4740 | 151 | // Se guarda la marca de tiempo |
JuanManuelAmador | 0:a5908bca4740 | 152 | IMUtime.put(t.read_us()); |
JuanManuelAmador | 0:a5908bca4740 | 153 | } |
JuanManuelAmador | 0:a5908bca4740 | 154 | } |
JuanManuelAmador | 0:a5908bca4740 | 155 | |
JuanManuelAmador | 0:a5908bca4740 | 156 | // Se reciben los bytes de la IMU2, se guardan en un buffer y se guarda una marca de tiempo si corresponde |
JuanManuelAmador | 0:a5908bca4740 | 157 | if(pIMU2.readable()){ |
JuanManuelAmador | 0:a5908bca4740 | 158 | byteINanterior2 = byteIN2; |
JuanManuelAmador | 0:a5908bca4740 | 159 | byteIN2 = pIMU2.getc(); |
JuanManuelAmador | 0:a5908bca4740 | 160 | IMUbuff2.put(byteIN2); // Se guarda el byte en el buffer |
JuanManuelAmador | 0:a5908bca4740 | 161 | if(byteIN2 == 0x65 && byteINanterior2 == 0x75){// Si el byte recibido es un 75 en hex, este byte marca la llegada de una nueva medida |
JuanManuelAmador | 0:a5908bca4740 | 162 | // Se guarda la marca de tiempo |
JuanManuelAmador | 0:a5908bca4740 | 163 | IMUtime2.put(t.read_us()); |
JuanManuelAmador | 0:a5908bca4740 | 164 | } |
JuanManuelAmador | 0:a5908bca4740 | 165 | } |
JuanManuelAmador | 0:a5908bca4740 | 166 | |
JuanManuelAmador | 0:a5908bca4740 | 167 | // Se reciben los bytes del LASER, se guardan en un buffer y se guarda una marca de tiempo si corresponde |
JuanManuelAmador | 0:a5908bca4740 | 168 | if(pLaser.readable()){ |
JuanManuelAmador | 0:a5908bca4740 | 169 | byteINL = pLaser.getc(); |
JuanManuelAmador | 0:a5908bca4740 | 170 | LASERbuff.put(byteINL); // Se guarda el byte en el buffer |
JuanManuelAmador | 0:a5908bca4740 | 171 | if(byteINL > 127){ // Los bytes con el bit más significativo a 1 son los primeros bytes d elos paquetes |
JuanManuelAmador | 0:a5908bca4740 | 172 | // por lo que se guarda la marca de tiempo correspondiente |
JuanManuelAmador | 0:a5908bca4740 | 173 | LASERtime.put(t.read_us()); |
JuanManuelAmador | 0:a5908bca4740 | 174 | } |
JuanManuelAmador | 0:a5908bca4740 | 175 | } |
JuanManuelAmador | 0:a5908bca4740 | 176 | |
JuanManuelAmador | 0:a5908bca4740 | 177 | if(!IMUbuff.isEmpty() && enviandoIMU2 == false && enviandoLASER == false){ // Si no se está enviando un paquete del láser y existen bytes por leer |
JuanManuelAmador | 0:a5908bca4740 | 178 | byteINanteriorbuff = byteINbuff; |
JuanManuelAmador | 0:a5908bca4740 | 179 | byteINbuff = IMUbuff.get(); |
JuanManuelAmador | 0:a5908bca4740 | 180 | // Reconstrucción del dato |
JuanManuelAmador | 0:a5908bca4740 | 181 | if(byteINbuff == 0x65 && byteINanteriorbuff == 0x75 && nBytes >= (TAMPAQUETEIMU-1)){ // Si el byte recibido es un 75 en hex, este byte marca la llegada de una nueva medida |
JuanManuelAmador | 0:a5908bca4740 | 182 | // Se pone el contador de bytes de un paquete a 0 |
JuanManuelAmador | 0:a5908bca4740 | 183 | //pc.putc('I'); // Se envían los dos bytes que indican el comienzo del paquete |
JuanManuelAmador | 0:a5908bca4740 | 184 | //pc.putc('I'); //antes de enviar el primer bytes de datos |
JuanManuelAmador | 0:a5908bca4740 | 185 | envioBuff.put('I'); |
JuanManuelAmador | 0:a5908bca4740 | 186 | envioBuff.put('I'); |
JuanManuelAmador | 0:a5908bca4740 | 187 | nBytes = 1; |
JuanManuelAmador | 0:a5908bca4740 | 188 | enviandoIMU = true; // Se está enviando un paquete de IMU |
JuanManuelAmador | 0:a5908bca4740 | 189 | |
JuanManuelAmador | 0:a5908bca4740 | 190 | }else{ // Todo lo que no sea 0x75 es parte del resto del dato |
JuanManuelAmador | 0:a5908bca4740 | 191 | // Se suma un byte mas |
JuanManuelAmador | 0:a5908bca4740 | 192 | nBytes++; |
JuanManuelAmador | 0:a5908bca4740 | 193 | // Para reconstruir el dato se mandan primero los bytes más significativos (que también es el orden en el que llegan) |
JuanManuelAmador | 0:a5908bca4740 | 194 | switch(nBytes){ |
JuanManuelAmador | 0:a5908bca4740 | 195 | case 6: |
JuanManuelAmador | 0:a5908bca4740 | 196 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 197 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 198 | break; |
JuanManuelAmador | 0:a5908bca4740 | 199 | case 7: |
JuanManuelAmador | 0:a5908bca4740 | 200 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 201 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 202 | break; |
JuanManuelAmador | 0:a5908bca4740 | 203 | case 8: |
JuanManuelAmador | 0:a5908bca4740 | 204 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 205 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 206 | break; |
JuanManuelAmador | 0:a5908bca4740 | 207 | case 9: |
JuanManuelAmador | 0:a5908bca4740 | 208 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 209 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 210 | break; |
JuanManuelAmador | 0:a5908bca4740 | 211 | case 10: |
JuanManuelAmador | 0:a5908bca4740 | 212 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 213 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 214 | break; |
JuanManuelAmador | 0:a5908bca4740 | 215 | case 11: |
JuanManuelAmador | 0:a5908bca4740 | 216 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 217 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 218 | break; |
JuanManuelAmador | 0:a5908bca4740 | 219 | case 12: |
JuanManuelAmador | 0:a5908bca4740 | 220 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 221 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 222 | break; |
JuanManuelAmador | 0:a5908bca4740 | 223 | case 13: |
JuanManuelAmador | 0:a5908bca4740 | 224 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 225 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 226 | break; |
JuanManuelAmador | 0:a5908bca4740 | 227 | case 14: |
JuanManuelAmador | 0:a5908bca4740 | 228 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 229 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 230 | break; |
JuanManuelAmador | 0:a5908bca4740 | 231 | case 15: |
JuanManuelAmador | 0:a5908bca4740 | 232 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 233 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 234 | break; |
JuanManuelAmador | 0:a5908bca4740 | 235 | case 16: |
JuanManuelAmador | 0:a5908bca4740 | 236 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 237 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 238 | break; |
JuanManuelAmador | 0:a5908bca4740 | 239 | case 17: |
JuanManuelAmador | 0:a5908bca4740 | 240 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 241 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 242 | break; |
JuanManuelAmador | 0:a5908bca4740 | 243 | case 20: |
JuanManuelAmador | 0:a5908bca4740 | 244 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 245 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 246 | break; |
JuanManuelAmador | 0:a5908bca4740 | 247 | case 21: |
JuanManuelAmador | 0:a5908bca4740 | 248 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 249 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 250 | break; |
JuanManuelAmador | 0:a5908bca4740 | 251 | case 22: |
JuanManuelAmador | 0:a5908bca4740 | 252 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 253 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 254 | break; |
JuanManuelAmador | 0:a5908bca4740 | 255 | case 23: |
JuanManuelAmador | 0:a5908bca4740 | 256 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 257 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 258 | break; |
JuanManuelAmador | 0:a5908bca4740 | 259 | case 24: |
JuanManuelAmador | 0:a5908bca4740 | 260 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 261 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 262 | break; |
JuanManuelAmador | 0:a5908bca4740 | 263 | case 25: |
JuanManuelAmador | 0:a5908bca4740 | 264 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 265 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 266 | break; |
JuanManuelAmador | 0:a5908bca4740 | 267 | case 26: |
JuanManuelAmador | 0:a5908bca4740 | 268 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 269 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 270 | break; |
JuanManuelAmador | 0:a5908bca4740 | 271 | case 27: |
JuanManuelAmador | 0:a5908bca4740 | 272 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 273 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 274 | break; |
JuanManuelAmador | 0:a5908bca4740 | 275 | case 28: |
JuanManuelAmador | 0:a5908bca4740 | 276 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 277 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 278 | break; |
JuanManuelAmador | 0:a5908bca4740 | 279 | case 29: |
JuanManuelAmador | 0:a5908bca4740 | 280 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 281 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 282 | break; |
JuanManuelAmador | 0:a5908bca4740 | 283 | case 30: |
JuanManuelAmador | 0:a5908bca4740 | 284 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 285 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 286 | break; |
JuanManuelAmador | 0:a5908bca4740 | 287 | case 31: |
JuanManuelAmador | 0:a5908bca4740 | 288 | //pc.putc(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 289 | envioBuff.put(byteINbuff); |
JuanManuelAmador | 0:a5908bca4740 | 290 | |
JuanManuelAmador | 0:a5908bca4740 | 291 | auxtime = IMUtime.get(); // Se recupera la marca de tiempo del paquete y se envía dividido en 4 bytes |
JuanManuelAmador | 0:a5908bca4740 | 292 | paqueteEnvio[3] = auxtime; |
JuanManuelAmador | 0:a5908bca4740 | 293 | auxtime >>= 8; |
JuanManuelAmador | 0:a5908bca4740 | 294 | paqueteEnvio[2] = auxtime; |
JuanManuelAmador | 0:a5908bca4740 | 295 | auxtime >>= 8; |
JuanManuelAmador | 0:a5908bca4740 | 296 | paqueteEnvio[1] = auxtime; |
JuanManuelAmador | 0:a5908bca4740 | 297 | auxtime >>= 8; |
JuanManuelAmador | 0:a5908bca4740 | 298 | paqueteEnvio[0] = auxtime; |
JuanManuelAmador | 0:a5908bca4740 | 299 | /*pc.putc(paqueteEnvio[0]); |
JuanManuelAmador | 0:a5908bca4740 | 300 | pc.putc(paqueteEnvio[1]); |
JuanManuelAmador | 0:a5908bca4740 | 301 | pc.putc(paqueteEnvio[2]); |
JuanManuelAmador | 0:a5908bca4740 | 302 | pc.putc(paqueteEnvio[3]);*/ |
JuanManuelAmador | 0:a5908bca4740 | 303 | envioBuff.put(paqueteEnvio[0]); |
JuanManuelAmador | 0:a5908bca4740 | 304 | envioBuff.put(paqueteEnvio[1]); |
JuanManuelAmador | 0:a5908bca4740 | 305 | envioBuff.put(paqueteEnvio[2]); |
JuanManuelAmador | 0:a5908bca4740 | 306 | envioBuff.put(paqueteEnvio[3]); |
JuanManuelAmador | 0:a5908bca4740 | 307 | enviandoIMU = false; // Se ha terminado de enviar el paquete de la IMU |
JuanManuelAmador | 0:a5908bca4740 | 308 | bytesEnviados += TAMENVIOIMU; |
JuanManuelAmador | 0:a5908bca4740 | 309 | break; |
JuanManuelAmador | 0:a5908bca4740 | 310 | } |
JuanManuelAmador | 0:a5908bca4740 | 311 | } |
JuanManuelAmador | 0:a5908bca4740 | 312 | } |
JuanManuelAmador | 0:a5908bca4740 | 313 | |
JuanManuelAmador | 0:a5908bca4740 | 314 | if(!IMUbuff2.isEmpty() && enviandoIMU == false && enviandoLASER == false){ // Si no se está enviando un paquete del láser y existen bytes por leer |
JuanManuelAmador | 0:a5908bca4740 | 315 | byteINanteriorbuff2 = byteINbuff2; |
JuanManuelAmador | 0:a5908bca4740 | 316 | byteINbuff2 = IMUbuff2.get(); |
JuanManuelAmador | 0:a5908bca4740 | 317 | // Reconstrucción del dato |
JuanManuelAmador | 0:a5908bca4740 | 318 | if(byteINbuff2 == 0x65 && byteINanteriorbuff2 == 0x75 && nBytes2 >= (TAMPAQUETEIMU-1)){ // Si el byte recibido es un 75 en hex, este byte marca la llegada de una nueva medida |
JuanManuelAmador | 0:a5908bca4740 | 319 | // Se pone el contador de bytes de un paquete a 0 |
JuanManuelAmador | 0:a5908bca4740 | 320 | //pc.putc('I'); // Se envían los dos bytes que indican el comienzo del paquete |
JuanManuelAmador | 0:a5908bca4740 | 321 | //pc.putc('I'); //antes de enviar el primer bytes de datos |
JuanManuelAmador | 0:a5908bca4740 | 322 | envioBuff.put('H'); |
JuanManuelAmador | 0:a5908bca4740 | 323 | envioBuff.put('H'); |
JuanManuelAmador | 0:a5908bca4740 | 324 | nBytes2 = 1; |
JuanManuelAmador | 0:a5908bca4740 | 325 | enviandoIMU2 = true; // Se está enviando un paquete de IMU |
JuanManuelAmador | 0:a5908bca4740 | 326 | |
JuanManuelAmador | 0:a5908bca4740 | 327 | }else{ // Todo lo que no sea 0x75 es parte del resto del dato |
JuanManuelAmador | 0:a5908bca4740 | 328 | // Se suma un byte mas |
JuanManuelAmador | 0:a5908bca4740 | 329 | nBytes2++; |
JuanManuelAmador | 0:a5908bca4740 | 330 | // Para reconstruir el dato se mandan primero los bytes más significativos (que también es el orden en el que llegan) |
JuanManuelAmador | 0:a5908bca4740 | 331 | switch(nBytes2){ |
JuanManuelAmador | 0:a5908bca4740 | 332 | case 6: |
JuanManuelAmador | 0:a5908bca4740 | 333 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 334 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 335 | break; |
JuanManuelAmador | 0:a5908bca4740 | 336 | case 7: |
JuanManuelAmador | 0:a5908bca4740 | 337 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 338 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 339 | break; |
JuanManuelAmador | 0:a5908bca4740 | 340 | case 8: |
JuanManuelAmador | 0:a5908bca4740 | 341 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 342 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 343 | break; |
JuanManuelAmador | 0:a5908bca4740 | 344 | case 9: |
JuanManuelAmador | 0:a5908bca4740 | 345 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 346 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 347 | break; |
JuanManuelAmador | 0:a5908bca4740 | 348 | case 10: |
JuanManuelAmador | 0:a5908bca4740 | 349 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 350 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 351 | break; |
JuanManuelAmador | 0:a5908bca4740 | 352 | case 11: |
JuanManuelAmador | 0:a5908bca4740 | 353 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 354 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 355 | break; |
JuanManuelAmador | 0:a5908bca4740 | 356 | case 12: |
JuanManuelAmador | 0:a5908bca4740 | 357 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 358 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 359 | break; |
JuanManuelAmador | 0:a5908bca4740 | 360 | case 13: |
JuanManuelAmador | 0:a5908bca4740 | 361 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 362 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 363 | break; |
JuanManuelAmador | 0:a5908bca4740 | 364 | case 14: |
JuanManuelAmador | 0:a5908bca4740 | 365 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 366 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 367 | break; |
JuanManuelAmador | 0:a5908bca4740 | 368 | case 15: |
JuanManuelAmador | 0:a5908bca4740 | 369 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 370 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 371 | break; |
JuanManuelAmador | 0:a5908bca4740 | 372 | case 16: |
JuanManuelAmador | 0:a5908bca4740 | 373 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 374 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 375 | break; |
JuanManuelAmador | 0:a5908bca4740 | 376 | case 17: |
JuanManuelAmador | 0:a5908bca4740 | 377 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 378 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 379 | break; |
JuanManuelAmador | 0:a5908bca4740 | 380 | case 20: |
JuanManuelAmador | 0:a5908bca4740 | 381 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 382 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 383 | break; |
JuanManuelAmador | 0:a5908bca4740 | 384 | case 21: |
JuanManuelAmador | 0:a5908bca4740 | 385 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 386 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 387 | break; |
JuanManuelAmador | 0:a5908bca4740 | 388 | case 22: |
JuanManuelAmador | 0:a5908bca4740 | 389 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 390 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 391 | break; |
JuanManuelAmador | 0:a5908bca4740 | 392 | case 23: |
JuanManuelAmador | 0:a5908bca4740 | 393 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 394 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 395 | break; |
JuanManuelAmador | 0:a5908bca4740 | 396 | case 24: |
JuanManuelAmador | 0:a5908bca4740 | 397 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 398 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 399 | break; |
JuanManuelAmador | 0:a5908bca4740 | 400 | case 25: |
JuanManuelAmador | 0:a5908bca4740 | 401 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 402 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 403 | break; |
JuanManuelAmador | 0:a5908bca4740 | 404 | case 26: |
JuanManuelAmador | 0:a5908bca4740 | 405 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 406 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 407 | break; |
JuanManuelAmador | 0:a5908bca4740 | 408 | case 27: |
JuanManuelAmador | 0:a5908bca4740 | 409 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 410 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 411 | break; |
JuanManuelAmador | 0:a5908bca4740 | 412 | case 28: |
JuanManuelAmador | 0:a5908bca4740 | 413 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 414 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 415 | break; |
JuanManuelAmador | 0:a5908bca4740 | 416 | case 29: |
JuanManuelAmador | 0:a5908bca4740 | 417 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 418 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 419 | break; |
JuanManuelAmador | 0:a5908bca4740 | 420 | case 30: |
JuanManuelAmador | 0:a5908bca4740 | 421 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 422 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 423 | break; |
JuanManuelAmador | 0:a5908bca4740 | 424 | case 31: |
JuanManuelAmador | 0:a5908bca4740 | 425 | //pc.putc(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 426 | envioBuff.put(byteINbuff2); |
JuanManuelAmador | 0:a5908bca4740 | 427 | |
JuanManuelAmador | 0:a5908bca4740 | 428 | auxtime = IMUtime2.get(); // Se recupera la marca de tiempo del paquete y se envía dividido en 4 bytes |
JuanManuelAmador | 0:a5908bca4740 | 429 | paqueteEnvio2[3] = auxtime; |
JuanManuelAmador | 0:a5908bca4740 | 430 | auxtime >>= 8; |
JuanManuelAmador | 0:a5908bca4740 | 431 | paqueteEnvio2[2] = auxtime; |
JuanManuelAmador | 0:a5908bca4740 | 432 | auxtime >>= 8; |
JuanManuelAmador | 0:a5908bca4740 | 433 | paqueteEnvio2[1] = auxtime; |
JuanManuelAmador | 0:a5908bca4740 | 434 | auxtime >>= 8; |
JuanManuelAmador | 0:a5908bca4740 | 435 | paqueteEnvio2[0] = auxtime; |
JuanManuelAmador | 0:a5908bca4740 | 436 | envioBuff.put(paqueteEnvio2[0]); |
JuanManuelAmador | 0:a5908bca4740 | 437 | envioBuff.put(paqueteEnvio2[1]); |
JuanManuelAmador | 0:a5908bca4740 | 438 | envioBuff.put(paqueteEnvio2[2]); |
JuanManuelAmador | 0:a5908bca4740 | 439 | envioBuff.put(paqueteEnvio2[3]); |
JuanManuelAmador | 0:a5908bca4740 | 440 | enviandoIMU2 = false; // Se ha terminado de enviar el paquete de la IMU |
JuanManuelAmador | 0:a5908bca4740 | 441 | bytesEnviados += TAMENVIOIMU; |
JuanManuelAmador | 0:a5908bca4740 | 442 | break; |
JuanManuelAmador | 0:a5908bca4740 | 443 | } |
JuanManuelAmador | 0:a5908bca4740 | 444 | } |
JuanManuelAmador | 0:a5908bca4740 | 445 | } |
JuanManuelAmador | 0:a5908bca4740 | 446 | |
JuanManuelAmador | 0:a5908bca4740 | 447 | if(!LASERbuff.isEmpty() && enviandoIMU == false && enviandoIMU2 == false){ |
JuanManuelAmador | 0:a5908bca4740 | 448 | byteINbuffL = LASERbuff.get(); |
JuanManuelAmador | 0:a5908bca4740 | 449 | // Si el byte recibido tiene el bit más significativo a 1 es el byte más significativo |
JuanManuelAmador | 0:a5908bca4740 | 450 | if(byteINbuffL > 127){ |
JuanManuelAmador | 0:a5908bca4740 | 451 | fbyte = 1; |
JuanManuelAmador | 0:a5908bca4740 | 452 | distancia = byteINbuffL; |
JuanManuelAmador | 0:a5908bca4740 | 453 | distancia &=~0x80; // El bit mas significativo hay que ponerlo a 0 |
JuanManuelAmador | 0:a5908bca4740 | 454 | enviandoLASER = true; // Se comienza a enviar el paquete del láser |
JuanManuelAmador | 0:a5908bca4740 | 455 | }else{ // Recibido byte menos significativo |
JuanManuelAmador | 0:a5908bca4740 | 456 | if (fbyte == 1){ // Si se recibió un byte más significativo puede reconstruirse el valor medido por el laser |
JuanManuelAmador | 0:a5908bca4740 | 457 | auxtime = LASERtime.get(); // Se lee el tiempo cuando en el instante de llegada del primer byte del paquete |
JuanManuelAmador | 0:a5908bca4740 | 458 | fbyte = 0; |
JuanManuelAmador | 0:a5908bca4740 | 459 | distancia <<= 7; |
JuanManuelAmador | 0:a5908bca4740 | 460 | distancia += byteINbuffL; // Unidades de ingenieria |
JuanManuelAmador | 0:a5908bca4740 | 461 | //distancia = distancia*0.0498; // (mm) La conversión a mm se hace en el PC para no tener que enviar un tipo float |
JuanManuelAmador | 0:a5908bca4740 | 462 | // que guardara los decimales de la operación |
JuanManuelAmador | 0:a5908bca4740 | 463 | // Los dos primeros bytes byte de los paquetes del laser seran una 'L' |
JuanManuelAmador | 0:a5908bca4740 | 464 | paqueteEnvioL[0] = 'L'; |
JuanManuelAmador | 0:a5908bca4740 | 465 | paqueteEnvioL[1] = 'L'; |
JuanManuelAmador | 0:a5908bca4740 | 466 | paqueteEnvioL[3] = distancia; |
JuanManuelAmador | 0:a5908bca4740 | 467 | distancia >>= 8; |
JuanManuelAmador | 0:a5908bca4740 | 468 | paqueteEnvioL[2] = distancia; |
JuanManuelAmador | 0:a5908bca4740 | 469 | // Se añaden también los 4 bytes del tiempo y se envía el paquete (siempre el byte más significativo se envía primero) |
JuanManuelAmador | 0:a5908bca4740 | 470 | paqueteEnvioL[7] = auxtime; |
JuanManuelAmador | 0:a5908bca4740 | 471 | auxtime >>= 8; |
JuanManuelAmador | 0:a5908bca4740 | 472 | paqueteEnvioL[6] = auxtime; |
JuanManuelAmador | 0:a5908bca4740 | 473 | auxtime >>= 8; |
JuanManuelAmador | 0:a5908bca4740 | 474 | paqueteEnvioL[5] = auxtime; |
JuanManuelAmador | 0:a5908bca4740 | 475 | auxtime >>= 8; |
JuanManuelAmador | 0:a5908bca4740 | 476 | paqueteEnvioL[4] = auxtime; |
JuanManuelAmador | 0:a5908bca4740 | 477 | envioPaquete(paqueteEnvioL, TAMENVIOLASER); |
JuanManuelAmador | 0:a5908bca4740 | 478 | enviandoLASER = false; // Se ha terminado de enviar el paquete del láser |
JuanManuelAmador | 0:a5908bca4740 | 479 | bytesEnviados += TAMENVIOLASER; |
JuanManuelAmador | 0:a5908bca4740 | 480 | } |
JuanManuelAmador | 0:a5908bca4740 | 481 | } |
JuanManuelAmador | 0:a5908bca4740 | 482 | |
JuanManuelAmador | 0:a5908bca4740 | 483 | } |
JuanManuelAmador | 0:a5908bca4740 | 484 | envioDatos(); |
JuanManuelAmador | 0:a5908bca4740 | 485 | } // if(adquiriendo) |
JuanManuelAmador | 0:a5908bca4740 | 486 | } // while(1) |
JuanManuelAmador | 0:a5908bca4740 | 487 | } // main |
JuanManuelAmador | 0:a5908bca4740 | 488 | |
JuanManuelAmador | 0:a5908bca4740 | 489 | // Envia todos los datos que pueda hasta que ya no se puede escribir en el puerto o no haya más datos que enviar |
JuanManuelAmador | 0:a5908bca4740 | 490 | void envioDatos(){ |
JuanManuelAmador | 0:a5908bca4740 | 491 | continuaEnviando = 1; |
JuanManuelAmador | 0:a5908bca4740 | 492 | while(continuaEnviando){ |
JuanManuelAmador | 0:a5908bca4740 | 493 | if (!envioBuff.isEmpty()){ |
JuanManuelAmador | 0:a5908bca4740 | 494 | if(pc.writeable()){ |
JuanManuelAmador | 0:a5908bca4740 | 495 | pc.putc(envioBuff.get()); |
JuanManuelAmador | 0:a5908bca4740 | 496 | /*envioBuff.get(); |
JuanManuelAmador | 0:a5908bca4740 | 497 | pc.putc('2');*/ |
JuanManuelAmador | 0:a5908bca4740 | 498 | }else{ |
JuanManuelAmador | 0:a5908bca4740 | 499 | continuaEnviando = 0; |
JuanManuelAmador | 0:a5908bca4740 | 500 | } |
JuanManuelAmador | 0:a5908bca4740 | 501 | }else{ |
JuanManuelAmador | 0:a5908bca4740 | 502 | continuaEnviando = 0; |
JuanManuelAmador | 0:a5908bca4740 | 503 | } |
JuanManuelAmador | 0:a5908bca4740 | 504 | } |
JuanManuelAmador | 0:a5908bca4740 | 505 | } |
JuanManuelAmador | 0:a5908bca4740 | 506 | |
JuanManuelAmador | 0:a5908bca4740 | 507 | void envioPaquete(unsigned char paquete[], int nElementos){ // Envía por el puerto serie un paquete de datos |
JuanManuelAmador | 0:a5908bca4740 | 508 | for(int i = 0; i < nElementos; i++){ |
JuanManuelAmador | 0:a5908bca4740 | 509 | //pc.putc(paquete[i]); |
JuanManuelAmador | 0:a5908bca4740 | 510 | envioBuff.put(paquete[i]); |
JuanManuelAmador | 0:a5908bca4740 | 511 | } |
JuanManuelAmador | 0:a5908bca4740 | 512 | } |
JuanManuelAmador | 0:a5908bca4740 | 513 | |
JuanManuelAmador | 0:a5908bca4740 | 514 | void startStreamingIMU(){ |
JuanManuelAmador | 0:a5908bca4740 | 515 | // Se envia un paquete de datos a la IMU que indica el comienzo de lectura de medidas |
JuanManuelAmador | 0:a5908bca4740 | 516 | pIMU.putc(0x75); // K |
JuanManuelAmador | 0:a5908bca4740 | 517 | pIMU.putc(0x65); // A |
JuanManuelAmador | 0:a5908bca4740 | 518 | pIMU.putc(0x0C); // alt + 12 ♀ |
JuanManuelAmador | 0:a5908bca4740 | 519 | pIMU.putc(0x05); // alt + 5 ♣ |
JuanManuelAmador | 0:a5908bca4740 | 520 | pIMU.putc(0x05); // alt + 5 ♣ |
JuanManuelAmador | 0:a5908bca4740 | 521 | pIMU.putc(0x11); // alt + 11 ♂ |
JuanManuelAmador | 0:a5908bca4740 | 522 | pIMU.putc(0x01); // alt + 1 ☺ |
JuanManuelAmador | 0:a5908bca4740 | 523 | pIMU.putc(0x01); // alt + 1 ☺ |
JuanManuelAmador | 0:a5908bca4740 | 524 | pIMU.putc(0x01); // alt + 1 ☺ |
JuanManuelAmador | 0:a5908bca4740 | 525 | pIMU.putc(0x04); // alt + 4 ♦ |
JuanManuelAmador | 0:a5908bca4740 | 526 | pIMU.putc(0x1A); // alt + 26 → |
JuanManuelAmador | 0:a5908bca4740 | 527 | |
JuanManuelAmador | 0:a5908bca4740 | 528 | pIMU2.putc(0x75); // K |
JuanManuelAmador | 0:a5908bca4740 | 529 | pIMU2.putc(0x65); // A |
JuanManuelAmador | 0:a5908bca4740 | 530 | pIMU2.putc(0x0C); // alt + 12 ♀ |
JuanManuelAmador | 0:a5908bca4740 | 531 | pIMU2.putc(0x05); // alt + 5 ♣ |
JuanManuelAmador | 0:a5908bca4740 | 532 | pIMU2.putc(0x05); // alt + 5 ♣ |
JuanManuelAmador | 0:a5908bca4740 | 533 | pIMU2.putc(0x11); // alt + 11 ♂ |
JuanManuelAmador | 0:a5908bca4740 | 534 | pIMU2.putc(0x01); // alt + 1 ☺ |
JuanManuelAmador | 0:a5908bca4740 | 535 | pIMU2.putc(0x01); // alt + 1 ☺ |
JuanManuelAmador | 0:a5908bca4740 | 536 | pIMU2.putc(0x01); // alt + 1 ☺ |
JuanManuelAmador | 0:a5908bca4740 | 537 | pIMU2.putc(0x04); // alt + 4 ♦ |
JuanManuelAmador | 0:a5908bca4740 | 538 | pIMU2.putc(0x1A); // alt + 26 → |
JuanManuelAmador | 0:a5908bca4740 | 539 | //pc.printf("Paquete de inicio enviado.\n\r"); |
JuanManuelAmador | 0:a5908bca4740 | 540 | } |
JuanManuelAmador | 0:a5908bca4740 | 541 | |
JuanManuelAmador | 0:a5908bca4740 | 542 | void flushSerialBuffer1(void) { char char1 = 0; while (pIMU.readable()) { char1 = pIMU.getc(); } return; } |
JuanManuelAmador | 0:a5908bca4740 | 543 | void flushSerialBuffer2(void) { char char1 = 0; while (pIMU2.readable()) { char1 = pIMU2.getc(); } return; } |
JuanManuelAmador | 0:a5908bca4740 | 544 | void flushSerialBuffer3(void) { char char1 = 0; while (pLaser.readable()) { char1 = pLaser.getc(); } return; } |