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@5:05fd6249c21b, 2018-08-17 (annotated)
- Committer:
- FannyCalle
- Date:
- Fri Aug 17 17:58:25 2018 +0000
- Revision:
- 5:05fd6249c21b
- Parent:
- 4:c2bdc2bced76
this program is designed for the CHITISAT's OBC, and is a prototype for the flight plan vs altitude.
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 | Serial sc(PB_6, PB_7,9600); //puerto para el sistema de comunicacioness |
FannyCalle | 0:642a7818292a | 14 | //I2C i2c(PB_4,PA_7); // puerto i2c |
FannyCalle | 0:642a7818292a | 15 | BMP280 bmp(i2c,0xEC); //Default address = 0x76 |
FannyCalle | 0:642a7818292a | 16 | Adafruit_ADS1115 ads(&i2c); // adc de 16 bits |
FannyCalle | 0:642a7818292a | 17 | Serial obc(USBTX,USBRX); // puerto virtual del obc |
FannyCalle | 0:642a7818292a | 18 | SENSOR uv(PB_4,PA_7); //sensor de rayos ultra violeta |
FannyCalle | 4:c2bdc2bced76 | 19 | SENSOR mag(PB_4,PA_7); // magnetometro |
FannyCalle | 0:642a7818292a | 20 | AnalogIn temp2(PA_5); //sensor de temperatura externa |
FannyCalle | 0:642a7818292a | 21 | AnalogIn voltaje(PA_4); //sensor analogico de voltaje |
FannyCalle | 0:642a7818292a | 22 | AnalogIn corriente(PA_3); // sensor analogico de corriente |
FannyCalle | 0:642a7818292a | 23 | AnalogIn temp3(ADC_TEMP); //sensor de temperatura del arm |
FannyCalle | 0:642a7818292a | 24 | DigitalOut Vcondicional(PA_8); //encendido de los sensores(logica negada) |
FannyCalle | 1:a147ca4f8fa0 | 25 | DigitalOut camera(PB_5); |
FannyCalle | 0:642a7818292a | 26 | DigitalOut led(PB_3); |
FannyCalle | 0:642a7818292a | 27 | MPU6050 mpu6050; |
FannyCalle | 0:642a7818292a | 28 | Timer t; |
FannyCalle | 0:642a7818292a | 29 | //***** declaracionde funciones |
FannyCalle | 0:642a7818292a | 30 | void take_tl(void); |
FannyCalle | 0:642a7818292a | 31 | void take_mision(void); |
FannyCalle | 0:642a7818292a | 32 | void save_tl(void); |
FannyCalle | 0:642a7818292a | 33 | void save_mision(void); |
FannyCalle | 0:642a7818292a | 34 | void build_tr1(void); |
FannyCalle | 0:642a7818292a | 35 | void build_tr2(void); |
FannyCalle | 0:642a7818292a | 36 | void send_tr(void); |
FannyCalle | 0:642a7818292a | 37 | float procesing_h(void); |
FannyCalle | 0:642a7818292a | 38 | int condiciones_iniciales(void); |
FannyCalle | 0:642a7818292a | 39 | void filtro_pasa_bajos(void); |
FannyCalle | 0:642a7818292a | 40 | float get_altura(void); |
FannyCalle | 0:642a7818292a | 41 | int guardar(int); |
FannyCalle | 5:05fd6249c21b | 42 | void prog_camara(void); |
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 | 5:05fd6249c21b | 83 | //**********interrupcion 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 | 5:05fd6249c21b | 99 | //wait(2); |
FannyCalle | 0:642a7818292a | 100 | Vcondicional=0; |
FannyCalle | 0:642a7818292a | 101 | //iniciando camara |
FannyCalle | 5:05fd6249c21b | 102 | prog_camara(); |
FannyCalle | 0:642a7818292a | 103 | obc.printf("iniciando camara\n\r"); |
FannyCalle | 0:642a7818292a | 104 | //******* condiciones iniciales |
FannyCalle | 0:642a7818292a | 105 | obc.printf("iniciando sistema"); |
FannyCalle | 0:642a7818292a | 106 | mkdir("/sd/prueba1", 0777); // |
FannyCalle | 0:642a7818292a | 107 | //LEER LA BANDERA DE STADO DEL SISTEMA BR |
FannyCalle | 0:642a7818292a | 108 | FILE *fp=fopen("/sd/condiciones/ci.txt","r"); |
FannyCalle | 0:642a7818292a | 109 | if(fp==NULL){printf("no se pudo acceder al sd 1.."); |
FannyCalle | 0:642a7818292a | 110 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 111 | NVIC_SystemReset();} |
FannyCalle | 0:642a7818292a | 112 | fscanf(fp,"%d",&BR); ///*************************************8revisar |
FannyCalle | 0:642a7818292a | 113 | fclose(fp); |
FannyCalle | 0:642a7818292a | 114 | int tipo=condiciones_iniciales(); |
FannyCalle | 0:642a7818292a | 115 | RS[10]= guardar(tipo); |
FannyCalle | 0:642a7818292a | 116 | P0=Pi; |
FannyCalle | 0:642a7818292a | 117 | dif=0; |
FannyCalle | 0:642a7818292a | 118 | float h=get_altura(); |
FannyCalle | 0:642a7818292a | 119 | tipo=2; |
FannyCalle | 0:642a7818292a | 120 | RS[11]= guardar(tipo); |
FannyCalle | 0:642a7818292a | 121 | led=1; |
FannyCalle | 0:642a7818292a | 122 | //iniciando sistema de comunicaciones |
FannyCalle | 0:642a7818292a | 123 | for(int i=0;i<=10;i++){ |
FannyCalle | 0:642a7818292a | 124 | sc.putc(enc); |
FannyCalle | 0:642a7818292a | 125 | led=!led; |
FannyCalle | 0:642a7818292a | 126 | obc.printf("encendido: %d\n",enc); |
FannyCalle | 0:642a7818292a | 127 | wait(0.3); |
FannyCalle | 0:642a7818292a | 128 | } |
FannyCalle | 0:642a7818292a | 129 | //******* FULL MODE |
FannyCalle | 0:642a7818292a | 130 | sc.attach(&callback); |
FannyCalle | 0:642a7818292a | 131 | //prueba*********** |
FannyCalle | 0:642a7818292a | 132 | //int alt=50; |
FannyCalle | 0:642a7818292a | 133 | //int altura=10; |
FannyCalle | 0:642a7818292a | 134 | //***************** |
FannyCalle | 0:642a7818292a | 135 | //float x=0.5; |
FannyCalle | 4:c2bdc2bced76 | 136 | float hmin=0.5; |
FannyCalle | 4:c2bdc2bced76 | 137 | float hsil; |
FannyCalle | 4:c2bdc2bced76 | 138 | hsil=hmin-0.1; |
FannyCalle | 4:c2bdc2bced76 | 139 | while(h<hsil){ |
FannyCalle | 0:642a7818292a | 140 | obc.printf("subiendo en silencio radial altura=%f\n\r",h); |
FannyCalle | 0:642a7818292a | 141 | h=get_altura(); |
FannyCalle | 0:642a7818292a | 142 | led=!led; |
FannyCalle | 0:642a7818292a | 143 | } |
FannyCalle | 0:642a7818292a | 144 | led=1;wait_ms(20);led=0; |
FannyCalle | 0:642a7818292a | 145 | while(h>=hmin){ |
FannyCalle | 0:642a7818292a | 146 | //while(alt>=5){ |
FannyCalle | 0:642a7818292a | 147 | if (menc==com){ |
FannyCalle | 0:642a7818292a | 148 | while(menc!=nak && h>=hmin){ |
FannyCalle | 0:642a7818292a | 149 | if(menc==tc){ |
FannyCalle | 0:642a7818292a | 150 | while(menc==tc && h>=hmin){//si no hay mensaje nuevo se mantiene en MM hasta que llegue unno |
FannyCalle | 0:642a7818292a | 151 | take_tl(); |
FannyCalle | 0:642a7818292a | 152 | take_mision(); |
FannyCalle | 0:642a7818292a | 153 | h=get_altura(); |
FannyCalle | 0:642a7818292a | 154 | save_tl(); |
FannyCalle | 1:a147ca4f8fa0 | 155 | build_tr2(); |
FannyCalle | 1:a147ca4f8fa0 | 156 | tipo=3; |
FannyCalle | 0:642a7818292a | 157 | RS[12]= guardar(tipo); |
FannyCalle | 0:642a7818292a | 158 | save_mision(); |
FannyCalle | 0:642a7818292a | 159 | send_tr(); |
FannyCalle | 0:642a7818292a | 160 | obc.printf("altura minima con tc1 %f\n",h); |
FannyCalle | 0:642a7818292a | 161 | } |
FannyCalle | 0:642a7818292a | 162 | } |
FannyCalle | 0:642a7818292a | 163 | else{ |
FannyCalle | 0:642a7818292a | 164 | while(menc==com && h>=hmin){//si no hay mensaje nuevo se mantiene en STM hasta que llegue unno |
FannyCalle | 0:642a7818292a | 165 | take_tl(); |
FannyCalle | 0:642a7818292a | 166 | h=get_altura(); |
FannyCalle | 0:642a7818292a | 167 | save_tl(); |
FannyCalle | 1:a147ca4f8fa0 | 168 | build_tr1(); |
FannyCalle | 1:a147ca4f8fa0 | 169 | tipo=3; |
FannyCalle | 0:642a7818292a | 170 | RS[12]= guardar(tipo); |
FannyCalle | 0:642a7818292a | 171 | send_tr(); |
FannyCalle | 0:642a7818292a | 172 | obc.printf("altura minima con tc %f\n",h); |
FannyCalle | 0:642a7818292a | 173 | } |
FannyCalle | 0:642a7818292a | 174 | } |
FannyCalle | 0:642a7818292a | 175 | } |
FannyCalle | 0:642a7818292a | 176 | } |
FannyCalle | 0:642a7818292a | 177 | else{ |
FannyCalle | 0:642a7818292a | 178 | while (menc==nak && h>=hmin){// si no hay mensaje nuevo se mantiene en SIM hasta que llegue unno |
FannyCalle | 0:642a7818292a | 179 | h=get_altura(); |
FannyCalle | 0:642a7818292a | 180 | take_tl(); |
FannyCalle | 0:642a7818292a | 181 | take_mision(); |
FannyCalle | 0:642a7818292a | 182 | save_tl(); |
FannyCalle | 0:642a7818292a | 183 | tipo=2; |
FannyCalle | 0:642a7818292a | 184 | RS[12]= guardar(tipo); |
FannyCalle | 0:642a7818292a | 185 | save_mision(); |
FannyCalle | 0:642a7818292a | 186 | obc.printf("alt=%f\n",h); |
FannyCalle | 0:642a7818292a | 187 | } |
FannyCalle | 0:642a7818292a | 188 | } |
FannyCalle | 0:642a7818292a | 189 | obc.printf("______________________NORMAL MODE______________________"); |
FannyCalle | 0:642a7818292a | 190 | } |
FannyCalle | 0:642a7818292a | 191 | //******* SLEEP MODE |
FannyCalle | 0:642a7818292a | 192 | for(int i=0;i<=5;i++){ |
FannyCalle | 0:642a7818292a | 193 | sc.putc(stby); |
FannyCalle | 0:642a7818292a | 194 | obc.printf("standby: %d",stby); |
FannyCalle | 0:642a7818292a | 195 | } |
FannyCalle | 1:a147ca4f8fa0 | 196 | float hant; |
FannyCalle | 2:ba3323e788fc | 197 | hant=h;//altura1; |
FannyCalle | 2:ba3323e788fc | 198 | //h=get_altura(); |
FannyCalle | 2:ba3323e788fc | 199 | float hact=get_altura();//altura1; |
FannyCalle | 1:a147ca4f8fa0 | 200 | float dif; |
FannyCalle | 1:a147ca4f8fa0 | 201 | dif=hant-hact; |
FannyCalle | 1:a147ca4f8fa0 | 202 | obc.printf("altan=%f altac=%f dif=%f\n",hant,hact,dif); |
FannyCalle | 1:a147ca4f8fa0 | 203 | while(dif!=0){ |
FannyCalle | 0:642a7818292a | 204 | obc.printf("********************sleep mode**************************"); |
FannyCalle | 0:642a7818292a | 205 | //while(hact!=0.0){ |
FannyCalle | 0:642a7818292a | 206 | hant=hact; |
FannyCalle | 2:ba3323e788fc | 207 | //h=get_altura(); |
FannyCalle | 2:ba3323e788fc | 208 | hact=get_altura();//altura1; |
FannyCalle | 0:642a7818292a | 209 | take_tl(); |
FannyCalle | 0:642a7818292a | 210 | take_mision(); |
FannyCalle | 0:642a7818292a | 211 | save_tl(); |
FannyCalle | 0:642a7818292a | 212 | tipo=2; |
FannyCalle | 0:642a7818292a | 213 | RS[12]= guardar(tipo); |
FannyCalle | 0:642a7818292a | 214 | save_mision(); |
FannyCalle | 1:a147ca4f8fa0 | 215 | dif=hant-hact; |
FannyCalle | 1:a147ca4f8fa0 | 216 | obc.printf("diferente de cero\n altan=%f altac=%f dif=%f\n",hant,hact,dif); |
FannyCalle | 1:a147ca4f8fa0 | 217 | led=!led; |
FannyCalle | 0:642a7818292a | 218 | } |
FannyCalle | 0:642a7818292a | 219 | //******* OFF MODE |
FannyCalle | 0:642a7818292a | 220 | //camara=1; // apagando camara |
FannyCalle | 5:05fd6249c21b | 221 | prog_camara(); |
FannyCalle | 0:642a7818292a | 222 | obc.printf("apagando camara\n\r"); |
FannyCalle | 0:642a7818292a | 223 | led=0; |
FannyCalle | 0:642a7818292a | 224 | Vcondicional=1; //apagando sensores |
FannyCalle | 0:642a7818292a | 225 | sc.putc(sos); |
FannyCalle | 3:fef99c7c92b5 | 226 | for(int i=0;i<=9;i++) |
FannyCalle | 3:fef99c7c92b5 | 227 | { |
FannyCalle | 3:fef99c7c92b5 | 228 | obc.printf("sos: %d\n",sos); |
FannyCalle | 3:fef99c7c92b5 | 229 | } |
FannyCalle | 0:642a7818292a | 230 | //obc.printf("%d\n",alt); |
FannyCalle | 0:642a7818292a | 231 | //activar modo reset |
FannyCalle | 1:a147ca4f8fa0 | 232 | HAL_PWR_EnterSTANDBYMode (); |
FannyCalle | 0:642a7818292a | 233 | //apagar obc |
FannyCalle | 0:642a7818292a | 234 | } |
FannyCalle | 0:642a7818292a | 235 | //********* Funciones |
FannyCalle | 0:642a7818292a | 236 | |
FannyCalle | 0:642a7818292a | 237 | void take_tl(void){ |
FannyCalle | 0:642a7818292a | 238 | int i; |
FannyCalle | 4:c2bdc2bced76 | 239 | IMU[0]=imu[0]= mag.getMx(); |
FannyCalle | 4:c2bdc2bced76 | 240 | IMU[1]=imu[1]= mag.getMy(); |
FannyCalle | 4:c2bdc2bced76 | 241 | IMU[2]=imu[2]= mag.getMz(); |
FannyCalle | 0:642a7818292a | 242 | mpu6050.MPU6050SelfTest(SelfTest); // Start by performing self test and reporting values |
FannyCalle | 0:642a7818292a | 243 | 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 | 244 | { |
FannyCalle | 0:642a7818292a | 245 | mpu6050.resetMPU6050(); // Reset registers to default in preparation for device calibration |
FannyCalle | 0:642a7818292a | 246 | mpu6050.calibrateMPU6050(gyroBias, accelBias); // Calibrate gyro and accelerometers, load biases in bias registers |
FannyCalle | 0:642a7818292a | 247 | mpu6050.initMPU6050(); |
FannyCalle | 0:642a7818292a | 248 | } |
FannyCalle | 0:642a7818292a | 249 | if(mpu6050.readByte(MPU6050_ADDRESS, INT_STATUS) & 0x01) { // check if data ready interrupt |
FannyCalle | 0:642a7818292a | 250 | mpu6050.readAccelData(accelCount); // Read the x/y/z adc values |
FannyCalle | 0:642a7818292a | 251 | mpu6050.getAres(); |
FannyCalle | 0:642a7818292a | 252 | |
FannyCalle | 0:642a7818292a | 253 | // Now we'll calculate the accleration value into actual g's |
FannyCalle | 1:a147ca4f8fa0 | 254 | imu[3]= accelCount[0];//*aRes - accelBias[0]; // get actual g value, this depends on scale being set |
FannyCalle | 1:a147ca4f8fa0 | 255 | imu[4]= accelCount[1];//*aRes - accelBias[1]; |
FannyCalle | 1:a147ca4f8fa0 | 256 | imu[5]= accelCount[2];//*aRes - accelBias[2]; |
FannyCalle | 0:642a7818292a | 257 | |
FannyCalle | 0:642a7818292a | 258 | mpu6050.readGyroData(gyroCount); // Read the x/y/z adc values |
FannyCalle | 0:642a7818292a | 259 | mpu6050.getGres(); |
FannyCalle | 0:642a7818292a | 260 | |
FannyCalle | 0:642a7818292a | 261 | // Calculate the gyro value into actual degrees per second |
FannyCalle | 1:a147ca4f8fa0 | 262 | imu[6]= gyroCount[0];//*gRes; // - gyroBias[0]; // get actual gyro value, this depends on scale being set |
FannyCalle | 1:a147ca4f8fa0 | 263 | imu[7]= gyroCount[1];//*gRes; // - gyroBias[1]; |
FannyCalle | 1:a147ca4f8fa0 | 264 | imu[8]= gyroCount[2];//*gRes; // - gyroBias[2]; |
FannyCalle | 0:642a7818292a | 265 | float temobcount = mpu6050.readTempData(); // Read the x/y/z adc values |
FannyCalle | 0:642a7818292a | 266 | temperature = (temobcount) / 340. + 36.53; // Temperature in degrees Centigrade |
FannyCalle | 0:642a7818292a | 267 | } |
FannyCalle | 0:642a7818292a | 268 | for(i=3;i<=8;i++){ |
FannyCalle | 0:642a7818292a | 269 | //imu.read(); |
FannyCalle | 1:a147ca4f8fa0 | 270 | IMU[i]=imu[i];//*10;//para la toma de datos |
FannyCalle | 0:642a7818292a | 271 | //obc.printf("%d\n",IMU[i]); |
FannyCalle | 0:642a7818292a | 272 | } |
FannyCalle | 0:642a7818292a | 273 | press=bmp.getPressure(); |
FannyCalle | 0:642a7818292a | 274 | //temperatura tomada del imu |
FannyCalle | 4:c2bdc2bced76 | 275 | int tempera=temperature*100; |
FannyCalle | 4:c2bdc2bced76 | 276 | int offsetadc=60; //CORRECCION DE LOS DATOS TOMADOS DEL ADC, EL ERROR ES PRODUCIDO POR VREF. |
FannyCalle | 4:c2bdc2bced76 | 277 | //tempera=ceil(tempera); |
FannyCalle | 4:c2bdc2bced76 | 278 | temp[0]=tempera; //temperatura en milivoltios ajuatado a 12 bits. |
FannyCalle | 4:c2bdc2bced76 | 279 | //float tempe1=temp2.read(); //obteniendo la temperatura en voltaje |
FannyCalle | 4:c2bdc2bced76 | 280 | temp[1]= temp2.read_u16();temp[1]=(temp[1]>>4)+offsetadc;//temperatura en milivoltios ajuatado a 12 bits. |
FannyCalle | 4:c2bdc2bced76 | 281 | sensor_adc[0]=temp3.read_u16();sen_adc[0]=(sensor_adc[0]>>4)+offsetadc; |
FannyCalle | 4:c2bdc2bced76 | 282 | sensor_adc[1]=corriente.read_u16();sen_adc[1]=(sensor_adc[1]>>4)+offsetadc; |
FannyCalle | 4:c2bdc2bced76 | 283 | sensor_adc[2]=voltaje.read_u16();sen_adc[2]=(sensor_adc[2]>>4)+offsetadc; |
FannyCalle | 0:642a7818292a | 284 | suv=uv.getUV(); |
FannyCalle | 0:642a7818292a | 285 | //sensor_adc[3]=temp2.read();//uv.read();sen_adc[3]=sensor_adc[3]/0.0008789062; |
FannyCalle | 4:c2bdc2bced76 | 286 | |
FannyCalle | 2:ba3323e788fc | 287 | obc.printf("tomando telemetria\n"); |
FannyCalle | 0:642a7818292a | 288 | } |
FannyCalle | 0:642a7818292a | 289 | |
FannyCalle | 0:642a7818292a | 290 | void take_mision(void){ |
FannyCalle | 1:a147ca4f8fa0 | 291 | int h1, h2, tiempo; |
FannyCalle | 1:a147ca4f8fa0 | 292 | h1=altura1*10; |
FannyCalle | 1:a147ca4f8fa0 | 293 | h2=h*10; |
FannyCalle | 1:a147ca4f8fa0 | 294 | tiempo=t.read(); |
FannyCalle | 1:a147ca4f8fa0 | 295 | tiempo=tiempo*100; |
FannyCalle | 1:a147ca4f8fa0 | 296 | senfis[0]=h1; |
FannyCalle | 1:a147ca4f8fa0 | 297 | senfis[1]=h2; |
FannyCalle | 1:a147ca4f8fa0 | 298 | senfis[2]=tiempo; |
FannyCalle | 4:c2bdc2bced76 | 299 | obc.printf("tiempo=%d",senfis[2]); |
FannyCalle | 1:a147ca4f8fa0 | 300 | /* |
FannyCalle | 0:642a7818292a | 301 | ads.setGain(GAIN_TWOTHIRDS); |
FannyCalle | 0:642a7818292a | 302 | for(int i=0;i<=3;i++){ |
FannyCalle | 0:642a7818292a | 303 | senfis[i]= ads.readADC_SingleEnded(i); |
FannyCalle | 1:a147ca4f8fa0 | 304 | */ |
FannyCalle | 0:642a7818292a | 305 | // obc.printf("\n senfis%d:%d 0x%.4x\n",i,senfis[i],senfis[i]); |
FannyCalle | 1:a147ca4f8fa0 | 306 | //} |
FannyCalle | 0:642a7818292a | 307 | obc.printf("tomando mision\n"); |
FannyCalle | 0:642a7818292a | 308 | } |
FannyCalle | 0:642a7818292a | 309 | void save_tl(void){ |
FannyCalle | 0:642a7818292a | 310 | mkdir("/sd/cubesat2p",0777); |
FannyCalle | 0:642a7818292a | 311 | FILE *fp=fopen("/sd/cubesat2p/trama1.txt","a"); |
FannyCalle | 0:642a7818292a | 312 | if(fp == NULL){ |
FannyCalle | 0:642a7818292a | 313 | obc.printf("no se puede abrir sd \n"); |
FannyCalle | 0:642a7818292a | 314 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 315 | NVIC_SystemReset(); |
FannyCalle | 0:642a7818292a | 316 | } |
FannyCalle | 5:05fd6249c21b | 317 | fprintf(fp,"%.2f %.2f %.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],sen_adc[0],sen_adc[1],sen_adc[2],suv,h); |
FannyCalle | 5:05fd6249c21b | 318 | obc.printf("%.2f %.2f %.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],sen_adc[0],sen_adc[1],sen_adc[2],suv,h); |
FannyCalle | 0:642a7818292a | 319 | fclose(fp); |
FannyCalle | 0:642a7818292a | 320 | obc.printf("guardando telemetria\n"); |
FannyCalle | 0:642a7818292a | 321 | } |
FannyCalle | 0:642a7818292a | 322 | void save_mision(void){ |
FannyCalle | 0:642a7818292a | 323 | mkdir("/sd/cubesat2p",0777); |
FannyCalle | 0:642a7818292a | 324 | FILE *fp=fopen("/sd/cubesat2p/trama2.txt","a"); |
FannyCalle | 0:642a7818292a | 325 | if(fp == NULL){ |
FannyCalle | 0:642a7818292a | 326 | obc.printf("no se puede abrir sd \n"); |
FannyCalle | 0:642a7818292a | 327 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 328 | NVIC_SystemReset(); |
FannyCalle | 0:642a7818292a | 329 | } |
FannyCalle | 0:642a7818292a | 330 | fprintf(fp,"%d %d %d %d\r\n",senfis[0],senfis[1],senfis[2],senfis[3]); |
FannyCalle | 0:642a7818292a | 331 | fclose(fp); |
FannyCalle | 0:642a7818292a | 332 | obc.printf("guardando mision\n"); |
FannyCalle | 0:642a7818292a | 333 | } |
FannyCalle | 0:642a7818292a | 334 | void build_tr1(void){ //construir trama de datos 1 |
FannyCalle | 4:c2bdc2bced76 | 335 | int barometro; |
FannyCalle | 4:c2bdc2bced76 | 336 | barometro=ceil(P*100); //tomando los 20 bits sin procesar del barometro |
FannyCalle | 4:c2bdc2bced76 | 337 | bar=barometro; |
FannyCalle | 5:05fd6249c21b | 338 | // obc.printf("p=%f barometro= %d bar= %d temp0= %d \n\r",P,barometro,bar,temp[0]); |
FannyCalle | 5:05fd6249c21b | 339 | // wait(1); |
FannyCalle | 4:c2bdc2bced76 | 340 | uint16_t y,z,y2,z4,ah,al; |
FannyCalle | 0:642a7818292a | 341 | uint32_t par[3];// para los tres pares de datos de 32 bits |
FannyCalle | 4:c2bdc2bced76 | 342 | uint32_t y4,y3; |
FannyCalle | 0:642a7818292a | 343 | uint32_t AH,AL; |
FannyCalle | 0:642a7818292a | 344 | y=4080; |
FannyCalle | 0:642a7818292a | 345 | z=15; |
FannyCalle | 0:642a7818292a | 346 | y4=0xff000000; |
FannyCalle | 0:642a7818292a | 347 | y3=0x00ff0000; |
FannyCalle | 0:642a7818292a | 348 | y2=0x0000ff00; |
FannyCalle | 0:642a7818292a | 349 | z4=0x000000ff; |
FannyCalle | 0:642a7818292a | 350 | //completando a paquetes de 32 bits |
FannyCalle | 0:642a7818292a | 351 | par[0]=(bar<<12)|temp[0]; |
FannyCalle | 5:05fd6249c21b | 352 | //obc.printf("par 0=%d",par[0]); |
FannyCalle | 5:05fd6249c21b | 353 | //wait(1); |
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 | 4:c2bdc2bced76 | 389 | uint16_t y,z,y2,z4,ah,al; |
FannyCalle | 4:c2bdc2bced76 | 390 | uint32_t par,y4,y3;// 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 | trama[0]=data2; //cabecera de la trama de datos 2 |
FannyCalle | 0:642a7818292a | 426 | //publicando la trama de datos 2 en el puerto virtual |
FannyCalle | 0:642a7818292a | 427 | for(int i=0;i<=30;i++){ |
FannyCalle | 0:642a7818292a | 428 | // obc.printf("%d\n",trama[i]); |
FannyCalle | 0:642a7818292a | 429 | } |
FannyCalle | 0:642a7818292a | 430 | obc.printf("construyendo trama 2 mision\n"); |
FannyCalle | 0:642a7818292a | 431 | } |
FannyCalle | 0:642a7818292a | 432 | |
FannyCalle | 0:642a7818292a | 433 | void send_tr(void){ |
FannyCalle | 0:642a7818292a | 434 | for(int i=0;i<=30;i++){ |
FannyCalle | 0:642a7818292a | 435 | sc.putc(trama[i]); |
FannyCalle | 0:642a7818292a | 436 | } |
FannyCalle | 0:642a7818292a | 437 | led=!led; |
FannyCalle | 0:642a7818292a | 438 | obc.printf("enviando trama\n"); |
FannyCalle | 0:642a7818292a | 439 | } |
FannyCalle | 0:642a7818292a | 440 | |
FannyCalle | 0:642a7818292a | 441 | int condiciones_iniciales() |
FannyCalle | 0:642a7818292a | 442 | { 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 | 443 | if(BR==0) |
FannyCalle | 0:642a7818292a | 444 | { |
FannyCalle | 0:642a7818292a | 445 | // recuperar datos iniciales |
FannyCalle | 0:642a7818292a | 446 | //************************************************************ |
FannyCalle | 0:642a7818292a | 447 | //TOMAR LOS 100 DATOS CADA .05 SEGUNDOS, PARA DETERMINAR LA PRESION INICIAL |
FannyCalle | 0:642a7818292a | 448 | for (int i=0;i<100;i++) |
FannyCalle | 4:c2bdc2bced76 | 449 | { |
FannyCalle | 0:642a7818292a | 450 | BMPTemp=bmp.getTemperature(); // generando t_fine PARA LA TEMPERATURA DE ESCALAMIENTP |
FannyCalle | 0:642a7818292a | 451 | Pp[i]= bmp.getPressure(); // pi es la condicion inical para la presion |
FannyCalle | 0:642a7818292a | 452 | Ps=Ps+Pp[i]; |
FannyCalle | 0:642a7818292a | 453 | led=!led; |
FannyCalle | 1:a147ca4f8fa0 | 454 | obc.printf("%.2f\n",Pp[i]); |
FannyCalle | 0:642a7818292a | 455 | wait(0.05); |
FannyCalle | 0:642a7818292a | 456 | } |
FannyCalle | 0:642a7818292a | 457 | //LA MEDIA DE TODOS LOS DATOS NOS DA LA PRESION REAL |
FannyCalle | 0:642a7818292a | 458 | Pi=Ps/100; //presion real |
FannyCalle | 0:642a7818292a | 459 | } |
FannyCalle | 0:642a7818292a | 460 | else |
FannyCalle | 0:642a7818292a | 461 | { |
FannyCalle | 0:642a7818292a | 462 | // leer las condiciones iniciales del archivo ci,txt |
FannyCalle | 0:642a7818292a | 463 | FILE *fp=fopen("/sd/condiciones/ci.txt","r"); |
FannyCalle | 4:c2bdc2bced76 | 464 | fscanf(fp,"%d %f %f",&BR,&BMPTemp,&Pi); |
FannyCalle | 0:642a7818292a | 465 | fclose(fp); |
FannyCalle | 0:642a7818292a | 466 | //fin de la lectura de datos |
FannyCalle | 0:642a7818292a | 467 | } |
FannyCalle | 0:642a7818292a | 468 | return 1; |
FannyCalle | 0:642a7818292a | 469 | } |
FannyCalle | 0:642a7818292a | 470 | |
FannyCalle | 0:642a7818292a | 471 | void filtro_pasa_bajos() |
FannyCalle | 0:642a7818292a | 472 | { |
FannyCalle | 0:642a7818292a | 473 | float wc,ts,es,e; |
FannyCalle | 0:642a7818292a | 474 | //************************ |
FannyCalle | 0:642a7818292a | 475 | //constantes para el filtro pasabajos |
FannyCalle | 0:642a7818292a | 476 | wc=0.1*3.1416*2; // frecuencia de corte para el filtro |
FannyCalle | 0:642a7818292a | 477 | ts=0.22; // tiempo de muestreo |
FannyCalle | 0:642a7818292a | 478 | es=-wc*ts; // |
FannyCalle | 0:642a7818292a | 479 | e=2.71828; // constante e |
FannyCalle | 0:642a7818292a | 480 | //************************************************************ |
FannyCalle | 0:642a7818292a | 481 | //FILTRO PASABAJOS |
FannyCalle | 0:642a7818292a | 482 | //************************************************************ |
FannyCalle | 0:642a7818292a | 483 | BMPTemp = (bmp.getTemperature()); //CALIBRANDO TEMPERATURA |
FannyCalle | 0:642a7818292a | 484 | Pa = bmp.getPressure(); //PRESION ANTERIOR |
FannyCalle | 0:642a7818292a | 485 | P=(1-pow(e,es))*Pa+Pi*pow(e,es); //filtro pasabajos |
FannyCalle | 0:642a7818292a | 486 | } |
FannyCalle | 0:642a7818292a | 487 | |
FannyCalle | 0:642a7818292a | 488 | float get_altura() |
FannyCalle | 0:642a7818292a | 489 | { |
FannyCalle | 0:642a7818292a | 490 | float base,ex, cons, dif; |
FannyCalle | 0:642a7818292a | 491 | float altura0; |
FannyCalle | 0:642a7818292a | 492 | cons=(273+BMPTemp)/0.0065; |
FannyCalle | 0:642a7818292a | 493 | ex=0.1903; // constante obtenida de (Ro*L)/(g*M) |
FannyCalle | 0:642a7818292a | 494 | //************************ |
FannyCalle | 0:642a7818292a | 495 | // condiciones iniciales para hallar la altura del sistema |
FannyCalle | 0:642a7818292a | 496 | // la ecuacion utilizada para determinar la altura es la formula barometrica |
FannyCalle | 0:642a7818292a | 497 | // con las constantes descritas en http://wikipedia/barometric altitud |
FannyCalle | 0:642a7818292a | 498 | //************************************************************ |
FannyCalle | 0:642a7818292a | 499 | //TOMANDO LA ALTURA |
FannyCalle | 0:642a7818292a | 500 | //************************************************************ |
FannyCalle | 0:642a7818292a | 501 | filtro_pasa_bajos(); |
FannyCalle | 0:642a7818292a | 502 | base=P/P0; |
FannyCalle | 0:642a7818292a | 503 | altura1=cons*(1-pow(base,ex)); //ecuacion barometrica |
FannyCalle | 0:642a7818292a | 504 | //************************************************************ |
FannyCalle | 0:642a7818292a | 505 | //ESCALANDO LA ALTURA A MEDIO METRO |
FannyCalle | 0:642a7818292a | 506 | //************************************************************ |
FannyCalle | 0:642a7818292a | 507 | altura0=floor(altura1); //RECONDEO AL MENOR |
FannyCalle | 0:642a7818292a | 508 | dif=altura1-altura0; //SACANDO LA PARTE DECIMAL |
FannyCalle | 0:642a7818292a | 509 | dif=dif*10; //CONVIRTIENDOLO A ENTERO |
FannyCalle | 0:642a7818292a | 510 | dif=floor(dif); //REDONDEANDO AL MENOR |
FannyCalle | 0:642a7818292a | 511 | if (altura1 >= 0){ //VER SI ES NEGATIVO O POSITIVO |
FannyCalle | 0:642a7818292a | 512 | if(dif>=5){ |
FannyCalle | 4:c2bdc2bced76 | 513 | h=altura0+0.5; //SI ES POSITIVO Y MAYOR A 5 LA PARTE DECIMAL, ANIADE .5 AL LA PARTE ENTERA |
FannyCalle | 0:642a7818292a | 514 | } |
FannyCalle | 0:642a7818292a | 515 | else{ |
FannyCalle | 0:642a7818292a | 516 | h=altura0; //SI ES MENOR A 5 LA PARTE DECIMAL Y POSITIVO, SOLO TOMA LA PARTE ENTERA |
FannyCalle | 0:642a7818292a | 517 | } |
FannyCalle | 0:642a7818292a | 518 | } |
FannyCalle | 0:642a7818292a | 519 | else{ |
FannyCalle | 0:642a7818292a | 520 | if(dif<=5){ //SI ES NEGATIVO Y MENOR A 5 LA PARTE DECIMAL, LE SUMA .5 A LA PARTE ENTERA |
FannyCalle | 0:642a7818292a | 521 | h=altura0+.5; |
FannyCalle | 0:642a7818292a | 522 | } |
FannyCalle | 0:642a7818292a | 523 | else{h=ceil(altura1); // SI EN NEGATIVO Y MAYOR A 5 LA PATE DECIMAL, REDONDEA AL MAYOR |
FannyCalle | 0:642a7818292a | 524 | } |
FannyCalle | 0:642a7818292a | 525 | } |
FannyCalle | 0:642a7818292a | 526 | //************************************************************ |
FannyCalle | 0:642a7818292a | 527 | //FIN DEL REDONDEO |
FannyCalle | 0:642a7818292a | 528 | //************************************************************ |
FannyCalle | 0:642a7818292a | 529 | obc.printf("%.2f %.2f\n",altura1, h); //guarda en el sd //IMPRIME EN PANTALL |
FannyCalle | 0:642a7818292a | 530 | Pi=P; |
FannyCalle | 0:642a7818292a | 531 | return (h); |
FannyCalle | 0:642a7818292a | 532 | } |
FannyCalle | 0:642a7818292a | 533 | int guardar(int tipo) |
FannyCalle | 0:642a7818292a | 534 | { |
FannyCalle | 0:642a7818292a | 535 | int i; |
FannyCalle | 0:642a7818292a | 536 | //si es de tipo 1, entonces son condicones iniciales |
FannyCalle | 0:642a7818292a | 537 | if (tipo==1) |
FannyCalle | 0:642a7818292a | 538 | { |
FannyCalle | 0:642a7818292a | 539 | if(BR==0) |
FannyCalle | 0:642a7818292a | 540 | { |
FannyCalle | 0:642a7818292a | 541 | //CREACION Y APERTURA DEL ULTIMO DOCUMENTO CREADO |
FannyCalle | 0:642a7818292a | 542 | //lectura del numero del ultimo documento creado. |
FannyCalle | 0:642a7818292a | 543 | FILE *dp=fopen("/sd/carpetas/numero.txt","r"); |
FannyCalle | 0:642a7818292a | 544 | if(dp==NULL){printf("no se pudo acceder al sd 2..."); |
FannyCalle | 0:642a7818292a | 545 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 546 | NVIC_SystemReset();} |
FannyCalle | 0:642a7818292a | 547 | fscanf(dp,"%d",&ND); |
FannyCalle | 1:a147ca4f8fa0 | 548 | fclose(dp); |
FannyCalle | 0:642a7818292a | 549 | ND=ND+1; |
FannyCalle | 4:c2bdc2bced76 | 550 | // creando la carpeta y guardando los datos iniciales en la carpeta de datos de prueba |
FannyCalle | 0:642a7818292a | 551 | FILE *dp1=fopen("/sd/carpetas/numero.txt","w"); |
FannyCalle | 0:642a7818292a | 552 | if(dp1==NULL){printf("no se pudo acceder al sd 3..."); |
FannyCalle | 0:642a7818292a | 553 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 554 | NVIC_SystemReset();} |
FannyCalle | 0:642a7818292a | 555 | fprintf(dp1,"%d",ND); |
FannyCalle | 0:642a7818292a | 556 | fclose(dp1); |
FannyCalle | 4:c2bdc2bced76 | 557 | //GRaBANDO LAS CONDICIONES INICIALES EN EL DOCUMENTO CI |
FannyCalle | 0:642a7818292a | 558 | FILE *fp=fopen("/sd/condiciones/ci.txt","w"); |
FannyCalle | 0:642a7818292a | 559 | if(fp==NULL){printf("no s epudo acceder al sd 4..."); |
FannyCalle | 0:642a7818292a | 560 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 561 | NVIC_SystemReset();} |
FannyCalle | 0:642a7818292a | 562 | fprintf(fp,"%d %f %f \r\n", BR,BMPTemp,Pi); |
FannyCalle | 0:642a7818292a | 563 | fclose(fp); |
FannyCalle | 0:642a7818292a | 564 | // creando la carpeta y guardando los datos iniciales en la carpeta condiciones iniciales |
FannyCalle | 0:642a7818292a | 565 | dato[25]=ND+48; |
FannyCalle | 0:642a7818292a | 566 | printf(dato,".txt"); printf("\n"); |
FannyCalle | 0:642a7818292a | 567 | FILE *fobc=fopen(dato,"a"); |
FannyCalle | 0:642a7818292a | 568 | for (i=0;i<100;i++) |
FannyCalle | 0:642a7818292a | 569 | { |
FannyCalle | 0:642a7818292a | 570 | fprintf(fobc,"%.2f \r\n",Pp[i]); |
FannyCalle | 0:642a7818292a | 571 | wait(0.01); |
FannyCalle | 0:642a7818292a | 572 | } |
FannyCalle | 0:642a7818292a | 573 | fclose(fobc); |
FannyCalle | 0:642a7818292a | 574 | //fin de la cracion del documento y guardado de datos |
FannyCalle | 0:642a7818292a | 575 | /////GUARDANDO EL PRIMER DATO EN EL NUEVO DOCUMENTO CREADO |
FannyCalle | 0:642a7818292a | 576 | file[16]=ND+48; //ajuste a ascii |
FannyCalle | 0:642a7818292a | 577 | printf(file,".txt"); printf("\n"); |
FannyCalle | 0:642a7818292a | 578 | FILE *pp=fopen(file,"w"); |
FannyCalle | 4:c2bdc2bced76 | 579 | if(pp==NULL) |
FannyCalle | 4:c2bdc2bced76 | 580 | { |
FannyCalle | 4:c2bdc2bced76 | 581 | printf("no s epudo acceder al sd..5"); |
FannyCalle | 4:c2bdc2bced76 | 582 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 4:c2bdc2bced76 | 583 | NVIC_SystemReset(); |
FannyCalle | 4:c2bdc2bced76 | 584 | } |
FannyCalle | 0:642a7818292a | 585 | fprintf(pp,"%f %f %f inicio\r\n",t.read(),BMPTemp,Pi); |
FannyCalle | 0:642a7818292a | 586 | fclose(pp); |
FannyCalle | 0:642a7818292a | 587 | led=1; |
FannyCalle | 5:05fd6249c21b | 588 | //wait(1); |
FannyCalle | 0:642a7818292a | 589 | } |
FannyCalle | 0:642a7818292a | 590 | else{BR=0; |
FannyCalle | 0:642a7818292a | 591 | } |
FannyCalle | 0:642a7818292a | 592 | //GRABANDO LAS CONDICIONES INICIALES EN EL DOCUMENTO CI |
FannyCalle | 0:642a7818292a | 593 | FILE *fp=fopen("/sd/condiciones/ci.txt","w"); |
FannyCalle | 0:642a7818292a | 594 | if(fp==NULL){printf("no s epudo acceder al sd 6..."); |
FannyCalle | 0:642a7818292a | 595 | BR=1;// abbrir documento de condiciones iniciles y cambiar Br para doocumentar el resetprogramado |
FannyCalle | 0:642a7818292a | 596 | NVIC_SystemReset();} |
FannyCalle | 0:642a7818292a | 597 | fprintf(fp,"%d %f %f \r\n", BR,BMPTemp,Pi); |
FannyCalle | 0:642a7818292a | 598 | fclose(fp); |
FannyCalle | 0:642a7818292a | 599 | //fin de la escrituta de datos de datos |
FannyCalle | 0:642a7818292a | 600 | //lectura del numero del ultimo documento creado. |
FannyCalle | 0:642a7818292a | 601 | FILE *dp=fopen("/sd/carpetas/numero.txt","r"); |
FannyCalle | 0:642a7818292a | 602 | fscanf(dp,"%d",&ND); |
FannyCalle | 0:642a7818292a | 603 | fclose(dp); |
FannyCalle | 0:642a7818292a | 604 | //fin de la lectura de dato |
FannyCalle | 0:642a7818292a | 605 | FILE *pp=fopen(file,"w"); |
FannyCalle | 0:642a7818292a | 606 | fprintf(pp,"recuperacion del sistema satisfactoriamente\r\n"); |
FannyCalle | 0:642a7818292a | 607 | fclose(pp); |
FannyCalle | 0:642a7818292a | 608 | return (1); |
FannyCalle | 0:642a7818292a | 609 | } |
FannyCalle | 0:642a7818292a | 610 | else |
FannyCalle | 0:642a7818292a | 611 | { |
FannyCalle | 1:a147ca4f8fa0 | 612 | if(tipo==2) |
FannyCalle | 1:a147ca4f8fa0 | 613 | { |
FannyCalle | 1:a147ca4f8fa0 | 614 | FILE *pp=fopen(file,"a"); |
FannyCalle | 1:a147ca4f8fa0 | 615 | if (pp == NULL) {printf("no se inicion 5...");} |
FannyCalle | 5:05fd6249c21b | 616 | fprintf(pp,"%f %d %d %d %d %d %d %d %d %d %f %f %d %d %d %d %d %d %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],sen_adc[0],sen_adc[1],sen_adc[2],suv,h); |
FannyCalle | 1:a147ca4f8fa0 | 617 | fclose(pp); |
FannyCalle | 1:a147ca4f8fa0 | 618 | return (2); |
FannyCalle | 1:a147ca4f8fa0 | 619 | } |
FannyCalle | 1:a147ca4f8fa0 | 620 | else |
FannyCalle | 1:a147ca4f8fa0 | 621 | { |
FannyCalle | 1:a147ca4f8fa0 | 622 | FILE *pp=fopen(file,"a"); |
FannyCalle | 1:a147ca4f8fa0 | 623 | if (pp == NULL) {printf("no se inicion 5...");} |
FannyCalle | 5:05fd6249c21b | 624 | 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 %f %f\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], h, altura1); |
FannyCalle | 1:a147ca4f8fa0 | 625 | fclose(pp); |
FannyCalle | 1:a147ca4f8fa0 | 626 | return (2); |
FannyCalle | 1:a147ca4f8fa0 | 627 | } |
FannyCalle | 0:642a7818292a | 628 | } |
FannyCalle | 5:05fd6249c21b | 629 | } |
FannyCalle | 5:05fd6249c21b | 630 | void prog_camara(void) |
FannyCalle | 5:05fd6249c21b | 631 | { |
FannyCalle | 5:05fd6249c21b | 632 | led=0; |
FannyCalle | 5:05fd6249c21b | 633 | camera=1; |
FannyCalle | 5:05fd6249c21b | 634 | wait(1); |
FannyCalle | 5:05fd6249c21b | 635 | camera=0; |
FannyCalle | 5:05fd6249c21b | 636 | led=1; |
FannyCalle | 5:05fd6249c21b | 637 | wait(2); |
FannyCalle | 5:05fd6249c21b | 638 | camera=1; |
FannyCalle | 0:642a7818292a | 639 | } |