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