this program is designed for the CHITISAT's OBC, and is a prototype for the flight plan vs altitude
Dependencies: ADS1015 BMP280 SDFileSystem SENSOR mbed
main.cpp@3:fef99c7c92b5, 2018-06-14 (annotated)
- Committer:
- FannyCalle
- Date:
- Thu Jun 14 14:22:30 2018 +0000
- Revision:
- 3:fef99c7c92b5
- Parent:
- 2:ba3323e788fc
- Child:
- 4:c2bdc2bced76
modificacion de mpu;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
FannyCalle | 1:a147ca4f8fa0 | 1 | /*Programa principal del computador a bordo del cubesat "CHITISAT" |
FannyCalle | 0:642a7818292a | 2 | */ |
FannyCalle | 0:642a7818292a | 3 | //*********************************************************************** |
FannyCalle | 0:642a7818292a | 4 | #include "mbed.h" |
FannyCalle | 0:642a7818292a | 5 | #include "Adafruit_ADS1015.h" |
FannyCalle | 0:642a7818292a | 6 | #include "SDFileSystem.h" |
FannyCalle | 0:642a7818292a | 7 | #include "BMP280.h" |
FannyCalle | 0:642a7818292a | 8 | #include "MPU6050.h" |
FannyCalle | 0:642a7818292a | 9 | //#include "HMC5883L.h" |
FannyCalle | 0:642a7818292a | 10 | #include "SENSOR.h" |
FannyCalle | 0:642a7818292a | 11 | //***** declaracion de puertos |
FannyCalle | 0:642a7818292a | 12 | SDFileSystem sd(PA_12, PA_6, PA_1, PB_0 , "sd");// puerto SPI para el Storage |
FannyCalle | 0:642a7818292a | 13 | //LocalFileSystem sd("local");// puerto SPI para el Storage |
FannyCalle | 0:642a7818292a | 14 | Serial sc(PB_6, PB_7,9600); //puerto para el sistema de comunicacioness |
FannyCalle | 0:642a7818292a | 15 | //I2C i2c(PB_4,PA_7); // puerto i2c |
FannyCalle | 0:642a7818292a | 16 | BMP280 bmp(i2c,0xEC); //Default address = 0x76 |
FannyCalle | 0:642a7818292a | 17 | Adafruit_ADS1115 ads(&i2c); // adc de 16 bits |
FannyCalle | 0:642a7818292a | 18 | Serial obc(USBTX,USBRX); // puerto virtual del obc |
FannyCalle | 0:642a7818292a | 19 | SENSOR uv(PB_4,PA_7); //sensor de rayos ultra violeta |
FannyCalle | 0:642a7818292a | 20 | //HMC5883L mag(PB_4,PA_7); // magnetometro |
FannyCalle | 0:642a7818292a | 21 | AnalogIn temp2(PA_5); //sensor de temperatura externa |
FannyCalle | 0:642a7818292a | 22 | AnalogIn voltaje(PA_4); //sensor analogico de voltaje |
FannyCalle | 0:642a7818292a | 23 | AnalogIn corriente(PA_3); // sensor analogico de corriente |
FannyCalle | 0:642a7818292a | 24 | AnalogIn temp3(ADC_TEMP); //sensor de temperatura del arm |
FannyCalle | 0:642a7818292a | 25 | DigitalOut Vcondicional(PA_8); //encendido de los sensores(logica negada) |
FannyCalle | 1:a147ca4f8fa0 | 26 | DigitalOut camera(PB_5); |
FannyCalle | 0:642a7818292a | 27 | DigitalOut led(PB_3); |
FannyCalle | 0:642a7818292a | 28 | MPU6050 mpu6050; |
FannyCalle | 0:642a7818292a | 29 | Timer t; |
FannyCalle | 0:642a7818292a | 30 | //***** declaracionde funciones |
FannyCalle | 0:642a7818292a | 31 | void take_tl(void); |
FannyCalle | 0:642a7818292a | 32 | void take_mision(void); |
FannyCalle | 0:642a7818292a | 33 | void save_tl(void); |
FannyCalle | 0:642a7818292a | 34 | void save_mision(void); |
FannyCalle | 0:642a7818292a | 35 | void build_tr1(void); |
FannyCalle | 0:642a7818292a | 36 | void build_tr2(void); |
FannyCalle | 0:642a7818292a | 37 | void send_tr(void); |
FannyCalle | 0:642a7818292a | 38 | float procesing_h(void); |
FannyCalle | 0:642a7818292a | 39 | int condiciones_iniciales(void); |
FannyCalle | 0:642a7818292a | 40 | void filtro_pasa_bajos(void); |
FannyCalle | 0:642a7818292a | 41 | float get_altura(void); |
FannyCalle | 0:642a7818292a | 42 | int guardar(int); |
FannyCalle | 0:642a7818292a | 43 | //declaracion de constntes |
FannyCalle | 0:642a7818292a | 44 | #define enc 0xA0 //'160' |
FannyCalle | 0:642a7818292a | 45 | #define stby 0xA1 //'161' |
FannyCalle | 0:642a7818292a | 46 | #define sos 0xEE //'238' |
FannyCalle | 0:642a7818292a | 47 | #define com 0xC0 //'192' |
FannyCalle | 0:642a7818292a | 48 | #define nak 0xC1 //193 |
FannyCalle | 0:642a7818292a | 49 | #define tc 0xC2 //194 |
FannyCalle | 0:642a7818292a | 50 | #define data1 0xD1 |
FannyCalle | 0:642a7818292a | 51 | #define data2 0xD2 |
FannyCalle | 0:642a7818292a | 52 | #define data3 0xD3 |
FannyCalle | 0:642a7818292a | 53 | //********************* |
FannyCalle | 0:642a7818292a | 54 | #define estado = '0xf'; //aun no se para que lo usare |
FannyCalle | 0:642a7818292a | 55 | //********************* |
FannyCalle | 0:642a7818292a | 56 | //declaracion de variables globales |
FannyCalle | 0:642a7818292a | 57 | //************************* |
FannyCalle | 0:642a7818292a | 58 | uint8_t trama[31]; |
FannyCalle | 0:642a7818292a | 59 | uint16_t IMU[9]; // magenotometro*3, acelerometro*3, giroscopio*3 |
FannyCalle | 0:642a7818292a | 60 | float imu[9]; // magenotometro*3, acelerometro*3, giroscopio*3 |
FannyCalle | 0:642a7818292a | 61 | uint32_t bar; float press=0; |
FannyCalle | 0:642a7818292a | 62 | uint16_t tem[2],temp[2]; //temperatura interna i externa del cubesast tomadas por i2c |
FannyCalle | 0:642a7818292a | 63 | uint16_t sen_adc[4]; // sensor temperatura de la placa, sensor de corriente, voltaje, ultravioleta |
FannyCalle | 0:642a7818292a | 64 | uint16_t sensor_adc[4]; // para la toma de datos analogicos |
FannyCalle | 0:642a7818292a | 65 | uint16_t suv; |
FannyCalle | 0:642a7818292a | 66 | uint16_t senfis[4]; //sensor de los fisicos |
FannyCalle | 0:642a7818292a | 67 | volatile uint8_t menc=nak; // mensaje manipulado por comunicaciones |
FannyCalle | 0:642a7818292a | 68 | //********************************************* |
FannyCalle | 0:642a7818292a | 69 | //nuevos valores de datos, aun por revisar |
FannyCalle | 0:642a7818292a | 70 | char file[]="/sd/prueba1/drop0.txt"; |
FannyCalle | 0:642a7818292a | 71 | char dato[]="/sd/condiciones/iniciales0.txt"; |
FannyCalle | 0:642a7818292a | 72 | float BMPTemp = 0; |
FannyCalle | 0:642a7818292a | 73 | //float altura1,altura0,h; |
FannyCalle | 0:642a7818292a | 74 | float P, Pi, Pa; |
FannyCalle | 0:642a7818292a | 75 | float Pp[100]; |
FannyCalle | 0:642a7818292a | 76 | int BR=0; //bandera de reset |
FannyCalle | 0:642a7818292a | 77 | float RS[16]; //registro de sensores |
FannyCalle | 0:642a7818292a | 78 | int ND ; |
FannyCalle | 0:642a7818292a | 79 | float h,altura1; |
FannyCalle | 0:642a7818292a | 80 | float P0; |
FannyCalle | 0:642a7818292a | 81 | float dif; |
FannyCalle | 0:642a7818292a | 82 | //********************************************* |
FannyCalle | 0:642a7818292a | 83 | //**********interruobcion activada por el rx de sistema de comunicaciones(sc) |
FannyCalle | 0:642a7818292a | 84 | void callback(){ |
FannyCalle | 0:642a7818292a | 85 | uint8_t menr=sc.getc(); |
FannyCalle | 0:642a7818292a | 86 | if(menr==nak || menr==tc ||menr==com){ //condicional para solo reconocer 3 comandos que puede llegar del sc |
FannyCalle | 0:642a7818292a | 87 | menc=menr; //si llegara otra cosa no cambiaria menc y no habria conflicto en los loops |
FannyCalle | 0:642a7818292a | 88 | } |
FannyCalle | 0:642a7818292a | 89 | obc.printf("resep: %d",menc);// borrar esto |
FannyCalle | 0:642a7818292a | 90 | } |
FannyCalle | 0:642a7818292a | 91 | //**********principal |
FannyCalle | 0:642a7818292a | 92 | int main() |
FannyCalle | 0:642a7818292a | 93 | { |
FannyCalle | 0:642a7818292a | 94 | t.reset(); |
FannyCalle | 0:642a7818292a | 95 | t.start(); |
FannyCalle | 0:642a7818292a | 96 | //******* inicio |
FannyCalle | 0:642a7818292a | 97 | obc.printf("iniciando sensores:\n"); |
FannyCalle | 0:642a7818292a | 98 | //encenciendo sensores |
FannyCalle | 1:a147ca4f8fa0 | 99 | wait(2); |
FannyCalle | 0:642a7818292a | 100 | Vcondicional=0; |
FannyCalle | 0:642a7818292a | 101 | //iniciando camara |
FannyCalle | 0:642a7818292a | 102 | camera=0; |
FannyCalle | 0:642a7818292a | 103 | led=1; |
FannyCalle | 0:642a7818292a | 104 | wait(2); |
FannyCalle | 0:642a7818292a | 105 | camera=1; |
FannyCalle | 0:642a7818292a | 106 | led=0; |
FannyCalle | 0:642a7818292a | 107 | wait(1); |
FannyCalle | 0:642a7818292a | 108 | obc.printf("iniciando camara\n\r"); |
FannyCalle | 0:642a7818292a | 109 | //******* condiciones iniciales |
FannyCalle | 0:642a7818292a | 110 | obc.printf("iniciando sistema"); |
FannyCalle | 0:642a7818292a | 111 | mkdir("/sd/prueba1", 0777); // |
FannyCalle | 0:642a7818292a | 112 | //LEER LA BANDERA DE STADO DEL SISTEMA BR |
FannyCalle | 0:642a7818292a | 113 | FILE *fp=fopen("/sd/condiciones/ci.txt","r"); |
FannyCalle | 0:642a7818292a | 114 | if(fp==NULL){printf("no se pudo acceder al sd 1.."); |
FannyCalle | 0:642a7818292a | 115 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 116 | NVIC_SystemReset();} |
FannyCalle | 0:642a7818292a | 117 | fscanf(fp,"%d",&BR); ///*************************************8revisar |
FannyCalle | 0:642a7818292a | 118 | fclose(fp); |
FannyCalle | 0:642a7818292a | 119 | int tipo=condiciones_iniciales(); |
FannyCalle | 0:642a7818292a | 120 | RS[10]= guardar(tipo); |
FannyCalle | 0:642a7818292a | 121 | P0=Pi; |
FannyCalle | 0:642a7818292a | 122 | dif=0; |
FannyCalle | 0:642a7818292a | 123 | float h=get_altura(); |
FannyCalle | 0:642a7818292a | 124 | tipo=2; |
FannyCalle | 0:642a7818292a | 125 | RS[11]= guardar(tipo); |
FannyCalle | 0:642a7818292a | 126 | led=1; |
FannyCalle | 0:642a7818292a | 127 | //iniciando sistema de comunicaciones |
FannyCalle | 0:642a7818292a | 128 | for(int i=0;i<=10;i++){ |
FannyCalle | 0:642a7818292a | 129 | sc.putc(enc); |
FannyCalle | 0:642a7818292a | 130 | led=!led; |
FannyCalle | 0:642a7818292a | 131 | obc.printf("encendido: %d\n",enc); |
FannyCalle | 0:642a7818292a | 132 | wait(0.3); |
FannyCalle | 0:642a7818292a | 133 | } |
FannyCalle | 0:642a7818292a | 134 | //******* FULL MODE |
FannyCalle | 0:642a7818292a | 135 | sc.attach(&callback); |
FannyCalle | 0:642a7818292a | 136 | //prueba*********** |
FannyCalle | 0:642a7818292a | 137 | //int alt=50; |
FannyCalle | 0:642a7818292a | 138 | //int altura=10; |
FannyCalle | 0:642a7818292a | 139 | //***************** |
FannyCalle | 0:642a7818292a | 140 | //float x=0.5; |
FannyCalle | 2:ba3323e788fc | 141 | float hmin=1; |
FannyCalle | 2:ba3323e788fc | 142 | while(h<0.9){ |
FannyCalle | 0:642a7818292a | 143 | obc.printf("subiendo en silencio radial altura=%f\n\r",h); |
FannyCalle | 0:642a7818292a | 144 | h=get_altura(); |
FannyCalle | 0:642a7818292a | 145 | led=!led; |
FannyCalle | 0:642a7818292a | 146 | } |
FannyCalle | 0:642a7818292a | 147 | led=1;wait_ms(20);led=0; |
FannyCalle | 0:642a7818292a | 148 | while(h>=hmin){ |
FannyCalle | 0:642a7818292a | 149 | //while(alt>=5){ |
FannyCalle | 0:642a7818292a | 150 | if (menc==com){ |
FannyCalle | 0:642a7818292a | 151 | while(menc!=nak && h>=hmin){ |
FannyCalle | 0:642a7818292a | 152 | if(menc==tc){ |
FannyCalle | 0:642a7818292a | 153 | while(menc==tc && h>=hmin){//si no hay mensaje nuevo se mantiene en MM hasta que llegue unno |
FannyCalle | 0:642a7818292a | 154 | take_tl(); |
FannyCalle | 0:642a7818292a | 155 | take_mision(); |
FannyCalle | 0:642a7818292a | 156 | h=get_altura(); |
FannyCalle | 0:642a7818292a | 157 | save_tl(); |
FannyCalle | 1:a147ca4f8fa0 | 158 | build_tr2(); |
FannyCalle | 1:a147ca4f8fa0 | 159 | tipo=3; |
FannyCalle | 0:642a7818292a | 160 | RS[12]= guardar(tipo); |
FannyCalle | 0:642a7818292a | 161 | save_mision(); |
FannyCalle | 0:642a7818292a | 162 | send_tr(); |
FannyCalle | 0:642a7818292a | 163 | obc.printf("altura minima con tc1 %f\n",h); |
FannyCalle | 0:642a7818292a | 164 | } |
FannyCalle | 0:642a7818292a | 165 | } |
FannyCalle | 0:642a7818292a | 166 | else{ |
FannyCalle | 0:642a7818292a | 167 | while(menc==com && h>=hmin){//si no hay mensaje nuevo se mantiene en STM hasta que llegue unno |
FannyCalle | 0:642a7818292a | 168 | take_tl(); |
FannyCalle | 0:642a7818292a | 169 | h=get_altura(); |
FannyCalle | 0:642a7818292a | 170 | save_tl(); |
FannyCalle | 1:a147ca4f8fa0 | 171 | build_tr1(); |
FannyCalle | 1:a147ca4f8fa0 | 172 | tipo=3; |
FannyCalle | 0:642a7818292a | 173 | RS[12]= guardar(tipo); |
FannyCalle | 0:642a7818292a | 174 | send_tr(); |
FannyCalle | 0:642a7818292a | 175 | obc.printf("altura minima con tc %f\n",h); |
FannyCalle | 0:642a7818292a | 176 | } |
FannyCalle | 0:642a7818292a | 177 | } |
FannyCalle | 0:642a7818292a | 178 | } |
FannyCalle | 0:642a7818292a | 179 | } |
FannyCalle | 0:642a7818292a | 180 | else{ |
FannyCalle | 0:642a7818292a | 181 | while (menc==nak && h>=hmin){// si no hay mensaje nuevo se mantiene en SIM hasta que llegue unno |
FannyCalle | 0:642a7818292a | 182 | h=get_altura(); |
FannyCalle | 0:642a7818292a | 183 | take_tl(); |
FannyCalle | 0:642a7818292a | 184 | take_mision(); |
FannyCalle | 0:642a7818292a | 185 | save_tl(); |
FannyCalle | 0:642a7818292a | 186 | tipo=2; |
FannyCalle | 0:642a7818292a | 187 | RS[12]= guardar(tipo); |
FannyCalle | 0:642a7818292a | 188 | save_mision(); |
FannyCalle | 0:642a7818292a | 189 | obc.printf("alt=%f\n",h); |
FannyCalle | 0:642a7818292a | 190 | } |
FannyCalle | 0:642a7818292a | 191 | } |
FannyCalle | 0:642a7818292a | 192 | obc.printf("______________________NORMAL MODE______________________"); |
FannyCalle | 0:642a7818292a | 193 | } |
FannyCalle | 0:642a7818292a | 194 | //******* SLEEP MODE |
FannyCalle | 0:642a7818292a | 195 | for(int i=0;i<=5;i++){ |
FannyCalle | 0:642a7818292a | 196 | sc.putc(stby); |
FannyCalle | 0:642a7818292a | 197 | obc.printf("standby: %d",stby); |
FannyCalle | 0:642a7818292a | 198 | } |
FannyCalle | 1:a147ca4f8fa0 | 199 | float hant; |
FannyCalle | 2:ba3323e788fc | 200 | hant=h;//altura1; |
FannyCalle | 2:ba3323e788fc | 201 | //h=get_altura(); |
FannyCalle | 2:ba3323e788fc | 202 | float hact=get_altura();//altura1; |
FannyCalle | 1:a147ca4f8fa0 | 203 | float dif; |
FannyCalle | 1:a147ca4f8fa0 | 204 | dif=hant-hact; |
FannyCalle | 1:a147ca4f8fa0 | 205 | obc.printf("altan=%f altac=%f dif=%f\n",hant,hact,dif); |
FannyCalle | 1:a147ca4f8fa0 | 206 | while(dif!=0){ |
FannyCalle | 0:642a7818292a | 207 | obc.printf("********************sleep mode**************************"); |
FannyCalle | 0:642a7818292a | 208 | //while(hact!=0.0){ |
FannyCalle | 0:642a7818292a | 209 | hant=hact; |
FannyCalle | 2:ba3323e788fc | 210 | //h=get_altura(); |
FannyCalle | 2:ba3323e788fc | 211 | hact=get_altura();//altura1; |
FannyCalle | 0:642a7818292a | 212 | take_tl(); |
FannyCalle | 0:642a7818292a | 213 | take_mision(); |
FannyCalle | 0:642a7818292a | 214 | save_tl(); |
FannyCalle | 0:642a7818292a | 215 | tipo=2; |
FannyCalle | 0:642a7818292a | 216 | RS[12]= guardar(tipo); |
FannyCalle | 0:642a7818292a | 217 | save_mision(); |
FannyCalle | 1:a147ca4f8fa0 | 218 | dif=hant-hact; |
FannyCalle | 1:a147ca4f8fa0 | 219 | obc.printf("diferente de cero\n altan=%f altac=%f dif=%f\n",hant,hact,dif); |
FannyCalle | 1:a147ca4f8fa0 | 220 | led=!led; |
FannyCalle | 0:642a7818292a | 221 | } |
FannyCalle | 0:642a7818292a | 222 | //******* OFF MODE |
FannyCalle | 0:642a7818292a | 223 | //camara=1; // apagando camara |
FannyCalle | 1:a147ca4f8fa0 | 224 | wait(0.5); |
FannyCalle | 0:642a7818292a | 225 | camera=0; |
FannyCalle | 0:642a7818292a | 226 | wait(1); |
FannyCalle | 0:642a7818292a | 227 | camera=1; |
FannyCalle | 0:642a7818292a | 228 | wait(3); |
FannyCalle | 0:642a7818292a | 229 | obc.printf("apagando camara\n\r"); |
FannyCalle | 0:642a7818292a | 230 | led=0; |
FannyCalle | 0:642a7818292a | 231 | Vcondicional=1; //apagando sensores |
FannyCalle | 0:642a7818292a | 232 | sc.putc(sos); |
FannyCalle | 3:fef99c7c92b5 | 233 | for(int i=0;i<=9;i++) |
FannyCalle | 3:fef99c7c92b5 | 234 | { |
FannyCalle | 3:fef99c7c92b5 | 235 | obc.printf("sos: %d\n",sos); |
FannyCalle | 3:fef99c7c92b5 | 236 | } |
FannyCalle | 0:642a7818292a | 237 | //obc.printf("%d\n",alt); |
FannyCalle | 0:642a7818292a | 238 | //activar modo reset |
FannyCalle | 1:a147ca4f8fa0 | 239 | HAL_PWR_EnterSTANDBYMode (); |
FannyCalle | 0:642a7818292a | 240 | //apagar obc |
FannyCalle | 0:642a7818292a | 241 | } |
FannyCalle | 0:642a7818292a | 242 | //********* Funciones |
FannyCalle | 0:642a7818292a | 243 | |
FannyCalle | 0:642a7818292a | 244 | void take_tl(void){ |
FannyCalle | 0:642a7818292a | 245 | int i; |
FannyCalle | 0:642a7818292a | 246 | IMU[0]=imu[0]=1;// mag.getMx(); |
FannyCalle | 0:642a7818292a | 247 | IMU[1]=imu[1]=2;// mag.getMy(); |
FannyCalle | 0:642a7818292a | 248 | IMU[2]=imu[2]=3;// mag.getMz(); |
FannyCalle | 3:fef99c7c92b5 | 249 | /* |
FannyCalle | 0:642a7818292a | 250 | uint8_t whoami = mpu6050.readByte(MPU6050_ADDRESS, WHO_AM_I_MPU6050); // Read WHO_AM_I register for MPU-6050\ |
FannyCalle | 0:642a7818292a | 251 | if (whoami == 0x68) // WHO_AM_I should always be 0x68 |
FannyCalle | 3:fef99c7c92b5 | 252 | {*/ |
FannyCalle | 0:642a7818292a | 253 | mpu6050.MPU6050SelfTest(SelfTest); // Start by performing self test and reporting values |
FannyCalle | 0:642a7818292a | 254 | if(SelfTest[0] < 1.0f && SelfTest[1] < 1.0f && SelfTest[2] < 1.0f && SelfTest[3] < 1.0f && SelfTest[4] < 1.0f && SelfTest[5] < 1.0f) |
FannyCalle | 0:642a7818292a | 255 | { |
FannyCalle | 0:642a7818292a | 256 | mpu6050.resetMPU6050(); // Reset registers to default in preparation for device calibration |
FannyCalle | 0:642a7818292a | 257 | mpu6050.calibrateMPU6050(gyroBias, accelBias); // Calibrate gyro and accelerometers, load biases in bias registers |
FannyCalle | 0:642a7818292a | 258 | mpu6050.initMPU6050(); |
FannyCalle | 0:642a7818292a | 259 | } |
FannyCalle | 3:fef99c7c92b5 | 260 | //} |
FannyCalle | 0:642a7818292a | 261 | if(mpu6050.readByte(MPU6050_ADDRESS, INT_STATUS) & 0x01) { // check if data ready interrupt |
FannyCalle | 0:642a7818292a | 262 | mpu6050.readAccelData(accelCount); // Read the x/y/z adc values |
FannyCalle | 0:642a7818292a | 263 | mpu6050.getAres(); |
FannyCalle | 0:642a7818292a | 264 | |
FannyCalle | 0:642a7818292a | 265 | // Now we'll calculate the accleration value into actual g's |
FannyCalle | 1:a147ca4f8fa0 | 266 | imu[3]= accelCount[0];//*aRes - accelBias[0]; // get actual g value, this depends on scale being set |
FannyCalle | 1:a147ca4f8fa0 | 267 | imu[4]= accelCount[1];//*aRes - accelBias[1]; |
FannyCalle | 1:a147ca4f8fa0 | 268 | imu[5]= accelCount[2];//*aRes - accelBias[2]; |
FannyCalle | 0:642a7818292a | 269 | |
FannyCalle | 0:642a7818292a | 270 | mpu6050.readGyroData(gyroCount); // Read the x/y/z adc values |
FannyCalle | 0:642a7818292a | 271 | mpu6050.getGres(); |
FannyCalle | 0:642a7818292a | 272 | |
FannyCalle | 0:642a7818292a | 273 | // Calculate the gyro value into actual degrees per second |
FannyCalle | 1:a147ca4f8fa0 | 274 | imu[6]= gyroCount[0];//*gRes; // - gyroBias[0]; // get actual gyro value, this depends on scale being set |
FannyCalle | 1:a147ca4f8fa0 | 275 | imu[7]= gyroCount[1];//*gRes; // - gyroBias[1]; |
FannyCalle | 1:a147ca4f8fa0 | 276 | imu[8]= gyroCount[2];//*gRes; // - gyroBias[2]; |
FannyCalle | 0:642a7818292a | 277 | float temobcount = mpu6050.readTempData(); // Read the x/y/z adc values |
FannyCalle | 0:642a7818292a | 278 | temperature = (temobcount) / 340. + 36.53; // Temperature in degrees Centigrade |
FannyCalle | 0:642a7818292a | 279 | } |
FannyCalle | 0:642a7818292a | 280 | for(i=3;i<=8;i++){ |
FannyCalle | 0:642a7818292a | 281 | //imu.read(); |
FannyCalle | 1:a147ca4f8fa0 | 282 | IMU[i]=imu[i];//*10;//para la toma de datos |
FannyCalle | 0:642a7818292a | 283 | //obc.printf("%d\n",IMU[i]); |
FannyCalle | 0:642a7818292a | 284 | } |
FannyCalle | 0:642a7818292a | 285 | press=bmp.getPressure(); |
FannyCalle | 0:642a7818292a | 286 | //temperatura tomada del imu |
FannyCalle | 0:642a7818292a | 287 | temp[0]=temperature*1000; //temperatura en milivoltios ajuatado a 12 bits. |
FannyCalle | 0:642a7818292a | 288 | float tempe1=temp2.read(); //obteniendo la temperatura en voltaje |
FannyCalle | 0:642a7818292a | 289 | temp[1]= temp2.read_u16();temp[1]=(temp[1]>>4);//temperatura en milivoltios ajuatado a 12 bits. |
FannyCalle | 0:642a7818292a | 290 | sensor_adc[0]=temp3.read_u16();sen_adc[0]=(sensor_adc[0]>>4); |
FannyCalle | 0:642a7818292a | 291 | sensor_adc[1]=corriente.read_u16();sen_adc[1]=(sensor_adc[1]>>4); |
FannyCalle | 0:642a7818292a | 292 | sensor_adc[2]=voltaje.read_u16();sen_adc[2]=(sensor_adc[2]>>4); |
FannyCalle | 0:642a7818292a | 293 | suv=uv.getUV(); |
FannyCalle | 0:642a7818292a | 294 | //sensor_adc[3]=temp2.read();//uv.read();sen_adc[3]=sensor_adc[3]/0.0008789062; |
FannyCalle | 2:ba3323e788fc | 295 | obc.printf("tomando telemetria\n"); |
FannyCalle | 0:642a7818292a | 296 | } |
FannyCalle | 0:642a7818292a | 297 | |
FannyCalle | 0:642a7818292a | 298 | void take_mision(void){ |
FannyCalle | 1:a147ca4f8fa0 | 299 | int h1, h2, tiempo; |
FannyCalle | 1:a147ca4f8fa0 | 300 | h1=altura1*10; |
FannyCalle | 1:a147ca4f8fa0 | 301 | h2=h*10; |
FannyCalle | 1:a147ca4f8fa0 | 302 | tiempo=t.read(); |
FannyCalle | 1:a147ca4f8fa0 | 303 | tiempo=tiempo*100; |
FannyCalle | 1:a147ca4f8fa0 | 304 | senfis[0]=h1; |
FannyCalle | 1:a147ca4f8fa0 | 305 | senfis[1]=h2; |
FannyCalle | 1:a147ca4f8fa0 | 306 | senfis[2]=tiempo; |
FannyCalle | 1:a147ca4f8fa0 | 307 | /* |
FannyCalle | 0:642a7818292a | 308 | ads.setGain(GAIN_TWOTHIRDS); |
FannyCalle | 0:642a7818292a | 309 | for(int i=0;i<=3;i++){ |
FannyCalle | 0:642a7818292a | 310 | senfis[i]= ads.readADC_SingleEnded(i); |
FannyCalle | 1:a147ca4f8fa0 | 311 | */ |
FannyCalle | 0:642a7818292a | 312 | // obc.printf("\n senfis%d:%d 0x%.4x\n",i,senfis[i],senfis[i]); |
FannyCalle | 1:a147ca4f8fa0 | 313 | //} |
FannyCalle | 0:642a7818292a | 314 | obc.printf("tomando mision\n"); |
FannyCalle | 0:642a7818292a | 315 | } |
FannyCalle | 0:642a7818292a | 316 | void save_tl(void){ |
FannyCalle | 0:642a7818292a | 317 | mkdir("/sd/cubesat2p",0777); |
FannyCalle | 0:642a7818292a | 318 | FILE *fp=fopen("/sd/cubesat2p/trama1.txt","a"); |
FannyCalle | 0:642a7818292a | 319 | if(fp == NULL){ |
FannyCalle | 0:642a7818292a | 320 | obc.printf("no se puede abrir sd \n"); |
FannyCalle | 0:642a7818292a | 321 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 322 | NVIC_SystemReset(); |
FannyCalle | 0:642a7818292a | 323 | } |
FannyCalle | 0:642a7818292a | 324 | fprintf(fp,"%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %d %d %d %d %d %f\r\n",imu[0],imu[1],imu[2],imu[3],imu[4],imu[5],imu[6],imu[7],imu[8],press,temperature,temp[1],sensor_adc[0],sensor_adc[1],sensor_adc[2],suv,h); |
FannyCalle | 0:642a7818292a | 325 | obc.printf("%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %d %d %d %d %d %f\r\n",imu[0],imu[1],imu[2],imu[3],imu[4],imu[5],imu[6],imu[7],imu[8],press,temperature,temp[1],sensor_adc[0],sensor_adc[1],sensor_adc[2],suv,h); |
FannyCalle | 0:642a7818292a | 326 | fclose(fp); |
FannyCalle | 0:642a7818292a | 327 | obc.printf("guardando telemetria\n"); |
FannyCalle | 0:642a7818292a | 328 | } |
FannyCalle | 0:642a7818292a | 329 | void save_mision(void){ |
FannyCalle | 0:642a7818292a | 330 | mkdir("/sd/cubesat2p",0777); |
FannyCalle | 0:642a7818292a | 331 | FILE *fp=fopen("/sd/cubesat2p/trama2.txt","a"); |
FannyCalle | 0:642a7818292a | 332 | if(fp == NULL){ |
FannyCalle | 0:642a7818292a | 333 | obc.printf("no se puede abrir sd \n"); |
FannyCalle | 0:642a7818292a | 334 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 335 | NVIC_SystemReset(); |
FannyCalle | 0:642a7818292a | 336 | } |
FannyCalle | 0:642a7818292a | 337 | fprintf(fp,"%d %d %d %d\r\n",senfis[0],senfis[1],senfis[2],senfis[3]); |
FannyCalle | 0:642a7818292a | 338 | fclose(fp); |
FannyCalle | 0:642a7818292a | 339 | obc.printf("guardando mision\n"); |
FannyCalle | 0:642a7818292a | 340 | } |
FannyCalle | 0:642a7818292a | 341 | void build_tr1(void){ //construir trama de datos 1 |
FannyCalle | 0:642a7818292a | 342 | bar=ceil(P*100); //tomando los 20 bits sin procesar del barometro |
FannyCalle | 0:642a7818292a | 343 | uint16_t y,z,y4,y3,y2,z4,ah,al; |
FannyCalle | 0:642a7818292a | 344 | uint32_t par[3];// para los tres pares de datos de 32 bits |
FannyCalle | 0:642a7818292a | 345 | uint32_t AH,AL; |
FannyCalle | 0:642a7818292a | 346 | y=4080; |
FannyCalle | 0:642a7818292a | 347 | z=15; |
FannyCalle | 0:642a7818292a | 348 | y4=0xff000000; |
FannyCalle | 0:642a7818292a | 349 | y3=0x00ff0000; |
FannyCalle | 0:642a7818292a | 350 | y2=0x0000ff00; |
FannyCalle | 0:642a7818292a | 351 | z4=0x000000ff; |
FannyCalle | 0:642a7818292a | 352 | //completando a paquetes de 32 bits |
FannyCalle | 0:642a7818292a | 353 | par[0]=(bar<<12)|temp[0]; |
FannyCalle | 0:642a7818292a | 354 | ah=sen_adc[1]&y; |
FannyCalle | 0:642a7818292a | 355 | al=sen_adc[1]&z; |
FannyCalle | 0:642a7818292a | 356 | ah=(ah>>4); |
FannyCalle | 0:642a7818292a | 357 | par[1]=(temp[1]<<20)|(sen_adc[0]<<8)|ah; |
FannyCalle | 0:642a7818292a | 358 | uint8_t est=15; |
FannyCalle | 0:642a7818292a | 359 | par[2]=(al<<28)|(sen_adc[2]<<16)|suv; |
FannyCalle | 0:642a7818292a | 360 | //asignando 8 bits a cada espacio de la trama |
FannyCalle | 0:642a7818292a | 361 | for(int i=0;i<=8;i++){ |
FannyCalle | 0:642a7818292a | 362 | AH=0;AL=0; |
FannyCalle | 0:642a7818292a | 363 | AH=IMU[i]&y2;AH=(AH>>8); |
FannyCalle | 0:642a7818292a | 364 | AL=IMU[i]&z4; |
FannyCalle | 0:642a7818292a | 365 | trama[i*2+1]=AH; |
FannyCalle | 0:642a7818292a | 366 | trama[i*2+2]=AL; |
FannyCalle | 0:642a7818292a | 367 | } |
FannyCalle | 0:642a7818292a | 368 | for(int i=0;i<=2;i++){ |
FannyCalle | 0:642a7818292a | 369 | AH=0;AL=0; |
FannyCalle | 0:642a7818292a | 370 | AH=par[i]&y4;AH=(AH>>24); |
FannyCalle | 0:642a7818292a | 371 | AL=par[i]&y3;AL=(AL>>16); |
FannyCalle | 0:642a7818292a | 372 | trama[i*4+19]=AH; |
FannyCalle | 0:642a7818292a | 373 | trama[i*4+20]=AL; |
FannyCalle | 0:642a7818292a | 374 | AH=0;AL=0; |
FannyCalle | 0:642a7818292a | 375 | AH=par[i]&y2;AH=(AH>>8); |
FannyCalle | 0:642a7818292a | 376 | AL=par[i]&z4; |
FannyCalle | 0:642a7818292a | 377 | trama[i*4+21]=AH; |
FannyCalle | 0:642a7818292a | 378 | trama[i*4+22]=AL; |
FannyCalle | 0:642a7818292a | 379 | } |
FannyCalle | 0:642a7818292a | 380 | trama[0]=data1;//cabecera de la trama de datos 1 |
FannyCalle | 0:642a7818292a | 381 | //publicando por el puerto serial. la trama de datos |
FannyCalle | 0:642a7818292a | 382 | for(int i=0;i<=30;i++){ |
FannyCalle | 0:642a7818292a | 383 | obc.printf("%d\n",trama[i]); |
FannyCalle | 0:642a7818292a | 384 | } |
FannyCalle | 0:642a7818292a | 385 | obc.printf("construyendo trama 1\n"); |
FannyCalle | 0:642a7818292a | 386 | } |
FannyCalle | 0:642a7818292a | 387 | void build_tr2(void){// construir trama de datos 2 |
FannyCalle | 0:642a7818292a | 388 | bar=ceil(P*100); //tomando los 20 bits sin procesar del barometro |
FannyCalle | 0:642a7818292a | 389 | uint16_t y,z,y4,y3,y2,z4,ah,al; |
FannyCalle | 0:642a7818292a | 390 | uint32_t par;// para los tres pares de datos de 32 bits |
FannyCalle | 0:642a7818292a | 391 | uint32_t AH,AL; |
FannyCalle | 0:642a7818292a | 392 | y=4080; |
FannyCalle | 0:642a7818292a | 393 | z=15; |
FannyCalle | 0:642a7818292a | 394 | y4=0xff000000; |
FannyCalle | 0:642a7818292a | 395 | y3=0x00ff0000; |
FannyCalle | 0:642a7818292a | 396 | y2=0x0000ff00; |
FannyCalle | 0:642a7818292a | 397 | z4=0x000000ff; |
FannyCalle | 0:642a7818292a | 398 | //completando a 32 bits |
FannyCalle | 0:642a7818292a | 399 | par=(bar<<12)|sen_adc[1]; |
FannyCalle | 0:642a7818292a | 400 | for(int i=0;i<=8;i++){ |
FannyCalle | 0:642a7818292a | 401 | AH=0;AL=0; |
FannyCalle | 0:642a7818292a | 402 | AH=IMU[i]&y2;AH=(AH>>8); |
FannyCalle | 0:642a7818292a | 403 | AL=IMU[i]&z4; |
FannyCalle | 0:642a7818292a | 404 | trama[i*2+1]=AH; |
FannyCalle | 0:642a7818292a | 405 | trama[i*2+2]=AL; |
FannyCalle | 0:642a7818292a | 406 | } |
FannyCalle | 0:642a7818292a | 407 | //asignando 8 bits a cada espacio de la trama2 |
FannyCalle | 0:642a7818292a | 408 | AH=0;AL=0; |
FannyCalle | 0:642a7818292a | 409 | AH=par&y4;AH=(AH>>24); |
FannyCalle | 0:642a7818292a | 410 | AL=par&y3;AL=(AL>>16); |
FannyCalle | 0:642a7818292a | 411 | trama[19]=AH; |
FannyCalle | 0:642a7818292a | 412 | trama[20]=AL; |
FannyCalle | 0:642a7818292a | 413 | AH=0;AL=0; |
FannyCalle | 0:642a7818292a | 414 | AH=par&y2;AH=(AH>>8); |
FannyCalle | 0:642a7818292a | 415 | AL=par&z4; |
FannyCalle | 0:642a7818292a | 416 | trama[21]=AH; |
FannyCalle | 0:642a7818292a | 417 | trama[22]=AL; |
FannyCalle | 0:642a7818292a | 418 | for(int i=0;i<=3;i++){ |
FannyCalle | 0:642a7818292a | 419 | AH=0;AL=0; |
FannyCalle | 0:642a7818292a | 420 | AH=senfis[i]&y2;AH=(AH>>8); |
FannyCalle | 0:642a7818292a | 421 | AL=senfis[i]&z4; |
FannyCalle | 0:642a7818292a | 422 | trama[i*2+23]=AH; |
FannyCalle | 0:642a7818292a | 423 | trama[i*2+24]=AL; |
FannyCalle | 0:642a7818292a | 424 | } |
FannyCalle | 0:642a7818292a | 425 | |
FannyCalle | 0:642a7818292a | 426 | trama[0]=data2; //cabecera de la trama de datos 2 |
FannyCalle | 0:642a7818292a | 427 | //publicando la trama de datos 2 en el puerto virtual |
FannyCalle | 0:642a7818292a | 428 | for(int i=0;i<=30;i++){ |
FannyCalle | 0:642a7818292a | 429 | // obc.printf("%d\n",trama[i]); |
FannyCalle | 0:642a7818292a | 430 | } |
FannyCalle | 0:642a7818292a | 431 | obc.printf("construyendo trama 2 mision\n"); |
FannyCalle | 0:642a7818292a | 432 | } |
FannyCalle | 0:642a7818292a | 433 | |
FannyCalle | 0:642a7818292a | 434 | void send_tr(void){ |
FannyCalle | 0:642a7818292a | 435 | /* |
FannyCalle | 0:642a7818292a | 436 | sc.putc(trama[1]); |
FannyCalle | 0:642a7818292a | 437 | sc.putc(trama[2]); |
FannyCalle | 0:642a7818292a | 438 | sc.putc(trama[3]); |
FannyCalle | 0:642a7818292a | 439 | sc.putc(trama[4]); |
FannyCalle | 0:642a7818292a | 440 | sc.putc(trama[5]); |
FannyCalle | 0:642a7818292a | 441 | sc.putc(trama[6]); |
FannyCalle | 0:642a7818292a | 442 | sc.putc(trama[7]); |
FannyCalle | 0:642a7818292a | 443 | sc.putc(trama[8]); |
FannyCalle | 0:642a7818292a | 444 | sc.putc(trama[9]); |
FannyCalle | 0:642a7818292a | 445 | sc.putc(trama[10]); |
FannyCalle | 0:642a7818292a | 446 | sc.putc(trama[11]); |
FannyCalle | 0:642a7818292a | 447 | sc.putc(trama[12]); |
FannyCalle | 0:642a7818292a | 448 | sc.putc(trama[13]); |
FannyCalle | 0:642a7818292a | 449 | sc.putc(trama[14]); |
FannyCalle | 0:642a7818292a | 450 | sc.putc(trama[15]); |
FannyCalle | 0:642a7818292a | 451 | sc.putc(trama[16]); |
FannyCalle | 0:642a7818292a | 452 | sc.putc(trama[17]); |
FannyCalle | 0:642a7818292a | 453 | sc.putc(trama[18]); |
FannyCalle | 0:642a7818292a | 454 | sc.putc(trama[19]); |
FannyCalle | 0:642a7818292a | 455 | sc.putc(trama[20]); |
FannyCalle | 0:642a7818292a | 456 | sc.putc(trama[21]); |
FannyCalle | 0:642a7818292a | 457 | sc.putc(trama[22]); |
FannyCalle | 0:642a7818292a | 458 | sc.putc(trama[23]); |
FannyCalle | 0:642a7818292a | 459 | sc.putc(trama[24]); |
FannyCalle | 0:642a7818292a | 460 | sc.putc(trama[25]); |
FannyCalle | 0:642a7818292a | 461 | sc.putc(trama[26]); |
FannyCalle | 0:642a7818292a | 462 | sc.putc(trama[27]); |
FannyCalle | 0:642a7818292a | 463 | sc.putc(trama[28]); |
FannyCalle | 0:642a7818292a | 464 | sc.putc(trama[29]); |
FannyCalle | 0:642a7818292a | 465 | sc.putc(trama[30]); |
FannyCalle | 0:642a7818292a | 466 | */ |
FannyCalle | 0:642a7818292a | 467 | for(int i=0;i<=30;i++){ |
FannyCalle | 0:642a7818292a | 468 | sc.putc(trama[i]); |
FannyCalle | 0:642a7818292a | 469 | } |
FannyCalle | 0:642a7818292a | 470 | led=!led; |
FannyCalle | 0:642a7818292a | 471 | obc.printf("enviando trama\n"); |
FannyCalle | 0:642a7818292a | 472 | } |
FannyCalle | 0:642a7818292a | 473 | |
FannyCalle | 0:642a7818292a | 474 | int condiciones_iniciales() |
FannyCalle | 0:642a7818292a | 475 | { float Ps=0;//variable auxiliar en la que se acumula la suma de los datos de presion para poder hallar la media |
FannyCalle | 0:642a7818292a | 476 | if(BR==0) |
FannyCalle | 0:642a7818292a | 477 | { |
FannyCalle | 0:642a7818292a | 478 | // recuperar datos iniciales |
FannyCalle | 0:642a7818292a | 479 | //************************************************************ |
FannyCalle | 0:642a7818292a | 480 | //TOMAR LOS 100 DATOS CADA .05 SEGUNDOS, PARA DETERMINAR LA PRESION INICIAL |
FannyCalle | 0:642a7818292a | 481 | for (int i=0;i<100;i++) |
FannyCalle | 0:642a7818292a | 482 | { |
FannyCalle | 0:642a7818292a | 483 | BMPTemp=bmp.getTemperature(); // generando t_fine PARA LA TEMPERATURA DE ESCALAMIENTP |
FannyCalle | 0:642a7818292a | 484 | Pp[i]= bmp.getPressure(); // pi es la condicion inical para la presion |
FannyCalle | 0:642a7818292a | 485 | Ps=Ps+Pp[i]; |
FannyCalle | 0:642a7818292a | 486 | led=!led; |
FannyCalle | 1:a147ca4f8fa0 | 487 | obc.printf("%.2f\n",Pp[i]); |
FannyCalle | 0:642a7818292a | 488 | wait(0.05); |
FannyCalle | 0:642a7818292a | 489 | } |
FannyCalle | 0:642a7818292a | 490 | //LA MEDIA DE TODOS LOS DATOS NOS DA LA PRESION REAL |
FannyCalle | 0:642a7818292a | 491 | Pi=Ps/100; //presion real |
FannyCalle | 0:642a7818292a | 492 | //************************************************************ |
FannyCalle | 0:642a7818292a | 493 | |
FannyCalle | 0:642a7818292a | 494 | } |
FannyCalle | 0:642a7818292a | 495 | else |
FannyCalle | 0:642a7818292a | 496 | { |
FannyCalle | 0:642a7818292a | 497 | // leer las condiciones iniciales del archivo ci,txt |
FannyCalle | 0:642a7818292a | 498 | FILE *fp=fopen("/sd/condiciones/ci.txt","r"); |
FannyCalle | 0:642a7818292a | 499 | // obc.printf("%d..................",fp); |
FannyCalle | 0:642a7818292a | 500 | fscanf(fp,"%d %f %f",&BR,&BMPTemp,&Pi); |
FannyCalle | 0:642a7818292a | 501 | fclose(fp); |
FannyCalle | 0:642a7818292a | 502 | //fin de la lectura de datos |
FannyCalle | 0:642a7818292a | 503 | } |
FannyCalle | 0:642a7818292a | 504 | //return (BMPTemp, pi); |
FannyCalle | 0:642a7818292a | 505 | return 1; |
FannyCalle | 0:642a7818292a | 506 | } |
FannyCalle | 0:642a7818292a | 507 | |
FannyCalle | 0:642a7818292a | 508 | void filtro_pasa_bajos() |
FannyCalle | 0:642a7818292a | 509 | { |
FannyCalle | 0:642a7818292a | 510 | float wc,ts,es,e; |
FannyCalle | 0:642a7818292a | 511 | //************************ |
FannyCalle | 0:642a7818292a | 512 | //constantes para el filtro pasabajos |
FannyCalle | 0:642a7818292a | 513 | wc=0.1*3.1416*2; // frecuencia de corte para el filtro |
FannyCalle | 0:642a7818292a | 514 | ts=0.22; // tiempo de muestreo |
FannyCalle | 0:642a7818292a | 515 | es=-wc*ts; // |
FannyCalle | 0:642a7818292a | 516 | e=2.71828; // constante e |
FannyCalle | 0:642a7818292a | 517 | //************************************************************ |
FannyCalle | 0:642a7818292a | 518 | //FILTRO PASABAJOS |
FannyCalle | 0:642a7818292a | 519 | //************************************************************ |
FannyCalle | 0:642a7818292a | 520 | BMPTemp = (bmp.getTemperature()); //CALIBRANDO TEMPERATURA |
FannyCalle | 0:642a7818292a | 521 | Pa = bmp.getPressure(); //PRESION ANTERIOR |
FannyCalle | 0:642a7818292a | 522 | P=(1-pow(e,es))*Pa+Pi*pow(e,es); //filtro pasabajos |
FannyCalle | 0:642a7818292a | 523 | } |
FannyCalle | 0:642a7818292a | 524 | |
FannyCalle | 0:642a7818292a | 525 | float get_altura() |
FannyCalle | 0:642a7818292a | 526 | { |
FannyCalle | 0:642a7818292a | 527 | float base,ex, cons, dif; |
FannyCalle | 0:642a7818292a | 528 | float altura0; |
FannyCalle | 0:642a7818292a | 529 | cons=(273+BMPTemp)/0.0065; |
FannyCalle | 0:642a7818292a | 530 | ex=0.1903; // constante obtenida de (Ro*L)/(g*M) |
FannyCalle | 0:642a7818292a | 531 | //************************ |
FannyCalle | 0:642a7818292a | 532 | // condiciones iniciales para hallar la altura del sistema |
FannyCalle | 0:642a7818292a | 533 | // la ecuacion utilizada para determinar la altura es la formula barometrica |
FannyCalle | 0:642a7818292a | 534 | // con las constantes descritas en http://wikipedia/barometric altitud |
FannyCalle | 0:642a7818292a | 535 | //************************************************************ |
FannyCalle | 0:642a7818292a | 536 | //TOMANDO LA ALTURA |
FannyCalle | 0:642a7818292a | 537 | //************************************************************ |
FannyCalle | 0:642a7818292a | 538 | filtro_pasa_bajos(); |
FannyCalle | 0:642a7818292a | 539 | base=P/P0; |
FannyCalle | 0:642a7818292a | 540 | altura1=cons*(1-pow(base,ex)); //ecuacion barometrica |
FannyCalle | 0:642a7818292a | 541 | //************************************************************ |
FannyCalle | 0:642a7818292a | 542 | //ESCALANDO LA ALTURA A MEDIO METRO |
FannyCalle | 0:642a7818292a | 543 | //************************************************************ |
FannyCalle | 0:642a7818292a | 544 | altura0=floor(altura1); //RECONDEO AL MENOR |
FannyCalle | 0:642a7818292a | 545 | dif=altura1-altura0; //SACANDO LA PARTE DECIMAL |
FannyCalle | 0:642a7818292a | 546 | dif=dif*10; //CONVIRTIENDOLO A ENTERO |
FannyCalle | 0:642a7818292a | 547 | dif=floor(dif); //REDONDEANDO AL MENOR |
FannyCalle | 0:642a7818292a | 548 | if (altura1 >= 0){ //VER SI ES NEGATIVO O POSITIVO |
FannyCalle | 0:642a7818292a | 549 | if(dif>=5){ |
FannyCalle | 0:642a7818292a | 550 | h=altura0+.5; //SI ES POSITIVO Y MAYOR A 5 LA PARTE DECIMAL, ANIADE .5 AL LA PARTE ENTERA |
FannyCalle | 0:642a7818292a | 551 | } |
FannyCalle | 0:642a7818292a | 552 | else{ |
FannyCalle | 0:642a7818292a | 553 | h=altura0; //SI ES MENOR A 5 LA PARTE DECIMAL Y POSITIVO, SOLO TOMA LA PARTE ENTERA |
FannyCalle | 0:642a7818292a | 554 | } |
FannyCalle | 0:642a7818292a | 555 | } |
FannyCalle | 0:642a7818292a | 556 | else{ |
FannyCalle | 0:642a7818292a | 557 | if(dif<=5){ //SI ES NEGATIVO Y MENOR A 5 LA PARTE DECIMAL, LE SUMA .5 A LA PARTE ENTERA |
FannyCalle | 0:642a7818292a | 558 | h=altura0+.5; |
FannyCalle | 0:642a7818292a | 559 | } |
FannyCalle | 0:642a7818292a | 560 | else{h=ceil(altura1); // SI EN NEGATIVO Y MAYOR A 5 LA PATE DECIMAL, REDONDEA AL MAYOR |
FannyCalle | 0:642a7818292a | 561 | } |
FannyCalle | 0:642a7818292a | 562 | } |
FannyCalle | 0:642a7818292a | 563 | //************************************************************ |
FannyCalle | 0:642a7818292a | 564 | //FIN DEL REDONDEO |
FannyCalle | 0:642a7818292a | 565 | //************************************************************ |
FannyCalle | 0:642a7818292a | 566 | obc.printf("%.2f %.2f\n",altura1, h); //guarda en el sd //IMPRIME EN PANTALL |
FannyCalle | 0:642a7818292a | 567 | Pi=P; |
FannyCalle | 0:642a7818292a | 568 | return (h); |
FannyCalle | 0:642a7818292a | 569 | } |
FannyCalle | 0:642a7818292a | 570 | int guardar(int tipo) |
FannyCalle | 0:642a7818292a | 571 | { |
FannyCalle | 0:642a7818292a | 572 | int i; |
FannyCalle | 0:642a7818292a | 573 | //si es de tipo 1, entonces son condicones iniciales |
FannyCalle | 0:642a7818292a | 574 | if (tipo==1) |
FannyCalle | 0:642a7818292a | 575 | { |
FannyCalle | 0:642a7818292a | 576 | if(BR==0) |
FannyCalle | 0:642a7818292a | 577 | { |
FannyCalle | 0:642a7818292a | 578 | //CREACION Y APERTURA DEL ULTIMO DOCUMENTO CREADO |
FannyCalle | 0:642a7818292a | 579 | //lectura del numero del ultimo documento creado. |
FannyCalle | 0:642a7818292a | 580 | FILE *dp=fopen("/sd/carpetas/numero.txt","r"); |
FannyCalle | 0:642a7818292a | 581 | if(dp==NULL){printf("no se pudo acceder al sd 2..."); |
FannyCalle | 0:642a7818292a | 582 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 583 | NVIC_SystemReset();} |
FannyCalle | 0:642a7818292a | 584 | fscanf(dp,"%d",&ND); |
FannyCalle | 1:a147ca4f8fa0 | 585 | fclose(dp); |
FannyCalle | 0:642a7818292a | 586 | ND=ND+1; |
FannyCalle | 0:642a7818292a | 587 | // creando la carpeta y guardando los datos iniciales en la carpeta de datos de prueba |
FannyCalle | 0:642a7818292a | 588 | FILE *dp1=fopen("/sd/carpetas/numero.txt","w"); |
FannyCalle | 0:642a7818292a | 589 | if(dp1==NULL){printf("no se pudo acceder al sd 3..."); |
FannyCalle | 0:642a7818292a | 590 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 591 | NVIC_SystemReset();} |
FannyCalle | 0:642a7818292a | 592 | fprintf(dp1,"%d",ND); |
FannyCalle | 0:642a7818292a | 593 | fclose(dp1); |
FannyCalle | 0:642a7818292a | 594 | //GRBANDO LAS CONDICIONES INICIALES EN EL DOCUMENTO CI |
FannyCalle | 0:642a7818292a | 595 | FILE *fp=fopen("/sd/condiciones/ci.txt","w"); |
FannyCalle | 0:642a7818292a | 596 | if(fp==NULL){printf("no s epudo acceder al sd 4..."); |
FannyCalle | 0:642a7818292a | 597 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 598 | NVIC_SystemReset();} |
FannyCalle | 0:642a7818292a | 599 | fprintf(fp,"%d %f %f \r\n", BR,BMPTemp,Pi); |
FannyCalle | 0:642a7818292a | 600 | fclose(fp); |
FannyCalle | 0:642a7818292a | 601 | |
FannyCalle | 0:642a7818292a | 602 | // creando la carpeta y guardando los datos iniciales en la carpeta condiciones iniciales |
FannyCalle | 0:642a7818292a | 603 | dato[25]=ND+48; |
FannyCalle | 0:642a7818292a | 604 | printf(dato,".txt"); printf("\n"); |
FannyCalle | 0:642a7818292a | 605 | FILE *fobc=fopen(dato,"a"); |
FannyCalle | 0:642a7818292a | 606 | for (i=0;i<100;i++) |
FannyCalle | 0:642a7818292a | 607 | { |
FannyCalle | 0:642a7818292a | 608 | //FILE *fobc=fopen("/sd/condiciones/iniciales.txt","a"); |
FannyCalle | 0:642a7818292a | 609 | fprintf(fobc,"%.2f \r\n",Pp[i]); |
FannyCalle | 0:642a7818292a | 610 | wait(0.01); |
FannyCalle | 0:642a7818292a | 611 | } |
FannyCalle | 0:642a7818292a | 612 | fclose(fobc); |
FannyCalle | 0:642a7818292a | 613 | //fin de la cracion del documento y guardado de datos |
FannyCalle | 0:642a7818292a | 614 | /////GUARDANDO EL PRIMER DATO EN EL NUEVO DOCUMENTO CREADO |
FannyCalle | 0:642a7818292a | 615 | file[16]=ND+48; //ajuste a ascii |
FannyCalle | 0:642a7818292a | 616 | printf(file,".txt"); printf("\n"); |
FannyCalle | 0:642a7818292a | 617 | FILE *pp=fopen(file,"w"); |
FannyCalle | 0:642a7818292a | 618 | if(pp==NULL){printf("no s epudo acceder al sd..5"); |
FannyCalle | 0:642a7818292a | 619 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 620 | NVIC_SystemReset();} |
FannyCalle | 0:642a7818292a | 621 | fprintf(pp,"%f %f %f inicio\r\n",t.read(),BMPTemp,Pi); |
FannyCalle | 0:642a7818292a | 622 | fclose(pp); |
FannyCalle | 0:642a7818292a | 623 | |
FannyCalle | 0:642a7818292a | 624 | led=1; |
FannyCalle | 0:642a7818292a | 625 | wait(1); |
FannyCalle | 0:642a7818292a | 626 | } |
FannyCalle | 0:642a7818292a | 627 | else{BR=0; |
FannyCalle | 0:642a7818292a | 628 | } |
FannyCalle | 0:642a7818292a | 629 | //GRABANDO LAS CONDICIONES INICIALES EN EL DOCUMENTO CI |
FannyCalle | 0:642a7818292a | 630 | FILE *fp=fopen("/sd/condiciones/ci.txt","w"); |
FannyCalle | 0:642a7818292a | 631 | if(fp==NULL){printf("no s epudo acceder al sd 6..."); |
FannyCalle | 0:642a7818292a | 632 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 633 | NVIC_SystemReset();} |
FannyCalle | 0:642a7818292a | 634 | fprintf(fp,"%d %f %f \r\n", BR,BMPTemp,Pi); |
FannyCalle | 0:642a7818292a | 635 | fclose(fp); |
FannyCalle | 0:642a7818292a | 636 | //fin de la escrituta de datos de datos |
FannyCalle | 0:642a7818292a | 637 | //lectura del numero del ultimo documento creado. |
FannyCalle | 0:642a7818292a | 638 | FILE *dp=fopen("/sd/carpetas/numero.txt","r"); |
FannyCalle | 0:642a7818292a | 639 | fscanf(dp,"%d",&ND); |
FannyCalle | 0:642a7818292a | 640 | fclose(dp); |
FannyCalle | 0:642a7818292a | 641 | //fin de la lectura de dato |
FannyCalle | 0:642a7818292a | 642 | FILE *pp=fopen(file,"w"); |
FannyCalle | 0:642a7818292a | 643 | fprintf(pp,"recuperacion del sistema satisfactoriamente\r\n"); |
FannyCalle | 0:642a7818292a | 644 | fclose(pp); |
FannyCalle | 0:642a7818292a | 645 | return (1); |
FannyCalle | 0:642a7818292a | 646 | } |
FannyCalle | 0:642a7818292a | 647 | else |
FannyCalle | 0:642a7818292a | 648 | { |
FannyCalle | 1:a147ca4f8fa0 | 649 | if(tipo==2) |
FannyCalle | 1:a147ca4f8fa0 | 650 | { |
FannyCalle | 1:a147ca4f8fa0 | 651 | FILE *pp=fopen(file,"a"); |
FannyCalle | 1:a147ca4f8fa0 | 652 | if (pp == NULL) {printf("no se inicion 5...");} |
FannyCalle | 1:a147ca4f8fa0 | 653 | fprintf(pp,"%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f\r\n",t.read(),imu[0],imu[1],imu[2],imu[3],imu[4],imu[5],imu[6],imu[7],imu[8],press,temperature,temp[1],sensor_adc[0],sensor_adc[1],sensor_adc[2],suv,h); |
FannyCalle | 1:a147ca4f8fa0 | 654 | //fprintf(pp,"%f %f %f %f %f\r\n",t.read(),BMPTemp,P,h,altura1); //guarda en el sd |
FannyCalle | 1:a147ca4f8fa0 | 655 | fclose(pp); |
FannyCalle | 1:a147ca4f8fa0 | 656 | return (2); |
FannyCalle | 1:a147ca4f8fa0 | 657 | } |
FannyCalle | 1:a147ca4f8fa0 | 658 | else |
FannyCalle | 1:a147ca4f8fa0 | 659 | { |
FannyCalle | 1:a147ca4f8fa0 | 660 | FILE *pp=fopen(file,"a"); |
FannyCalle | 1:a147ca4f8fa0 | 661 | if (pp == NULL) {printf("no se inicion 5...");} |
FannyCalle | 1:a147ca4f8fa0 | 662 | fprintf(pp,"%f %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d \r\n",t.read(),trama[0],trama[1],trama[2],trama[3],trama[4],trama[5],trama[6],trama[7],trama[8], trama[9],trama[10],trama[11],trama[12],trama[13],trama[14],trama[15],trama[16],trama[17],trama[18], trama[19],trama[20],trama[21],trama[22],trama[23],trama[24],trama[25],trama[26],trama[27],trama[28], trama[29], trama[30]); |
FannyCalle | 1:a147ca4f8fa0 | 663 | //fprintf(pp,"%f %f %f %f %f\r\n",t.read(),BMPTemp,P,h,altura1); //guarda en el sd |
FannyCalle | 1:a147ca4f8fa0 | 664 | fclose(pp); |
FannyCalle | 1:a147ca4f8fa0 | 665 | return (2); |
FannyCalle | 1:a147ca4f8fa0 | 666 | } |
FannyCalle | 0:642a7818292a | 667 | } |
FannyCalle | 0:642a7818292a | 668 | } |