main program

Dependencies:   PQMPU9250 PQINA226 mbed PQAEGPS PQEEPROM PQADXL375 SDFileSystem PQLPS22HB PQES920LR

Committer:
tanahashi
Date:
Mon Mar 02 07:16:00 2020 +0000
Revision:
5:22adf1eae5e4
Parent:
4:5bc218b2a974
fixed pinout

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tanahashi 0:106e97338223 1 #include "mbed.h"
tanahashi 0:106e97338223 2 #include "SDFileSystem.h"
tanahashi 0:106e97338223 3
tanahashi 0:106e97338223 4 #include "PQADXL375.h"
tanahashi 0:106e97338223 5 #include "PQAEGPS.h"
tanahashi 0:106e97338223 6 #include "PQEEPROM.h"
tanahashi 0:106e97338223 7 #include "PQES920LR.h"
tanahashi 0:106e97338223 8 #include "PQINA226.h"
tanahashi 0:106e97338223 9 #include "PQLPS22HB.h"
tanahashi 0:106e97338223 10 #include "PQMPU9250.h"
tanahashi 0:106e97338223 11
tanahashi 2:104839501493 12 #define BURN_TIME 3.0f
tanahashi 2:104839501493 13 #define T_SEP 7.0f
tanahashi 1:5c46289e3bd1 14 #define T_RECOVERY 14.0f
tanahashi 1:5c46289e3bd1 15
tanahashi 2:104839501493 16 #define DEBUG_RATE 1
tanahashi 2:104839501493 17 #define DATA_RATE 20
tanahashi 2:104839501493 18 #define LOG_RATE 1
tanahashi 1:5c46289e3bd1 19 #define DOWNLINK_RATE 1
tanahashi 1:5c46289e3bd1 20
tanahashi 2:104839501493 21 #define LOG_HEADER 0x11
tanahashi 1:5c46289e3bd1 22 #define DOWNLINK_HEADER 0x12
tanahashi 2:104839501493 23 #define UPLINK_HEADER 0x13
tanahashi 1:5c46289e3bd1 24
tanahashi 2:104839501493 25 #define TIME_LSB 54.931640625
tanahashi 1:5c46289e3bd1 26 #define VOLTAGE_LSB 1.25
tanahashi 2:104839501493 27 #define CURRENT_LSB 1.0986328125
tanahashi 2:104839501493 28 #define PRESS_LSB 0.0384521484375
tanahashi 2:104839501493 29 #define TEMP_LSB 0.002593994140625
tanahashi 2:104839501493 30 #define ACCEL_LSB 0.00048828125
tanahashi 2:104839501493 31 #define GYRO_LSB 0.06103515625
tanahashi 2:104839501493 32 #define MAG_LSB 0.146484375
tanahashi 0:106e97338223 33
tanahashi 0:106e97338223 34 Serial pc(USBTX, USBRX, 115200);
tanahashi 1:5c46289e3bd1 35
tanahashi 5:22adf1eae5e4 36 Serial gps_serial(p9, p10, 115200);
tanahashi 5:22adf1eae5e4 37 Serial es_serial(p13, p14, 115200);
tanahashi 0:106e97338223 38
tanahashi 0:106e97338223 39 I2C i2c(p28, p27);
tanahashi 0:106e97338223 40
tanahashi 1:5c46289e3bd1 41 SDFileSystem sd_file_system(p5, p6, p7, p8, "sd");
tanahashi 1:5c46289e3bd1 42
tanahashi 1:5c46289e3bd1 43 ES920LR es(es_serial);
tanahashi 0:106e97338223 44
tanahashi 0:106e97338223 45 AEGPS gps(gps_serial);
tanahashi 0:106e97338223 46
tanahashi 0:106e97338223 47 ADXL375 adxl(i2c, ADXL375::ALT_ADDRESS_HIGH);
tanahashi 0:106e97338223 48 INA226 ina_in(i2c, INA226::A0_VS, INA226::A1_VS);
tanahashi 0:106e97338223 49 INA226 ina_ex(i2c, INA226::A0_GND, INA226::A1_GND);
tanahashi 0:106e97338223 50 LPS22HB lps(i2c, LPS22HB::SA0_HIGH);
tanahashi 0:106e97338223 51 MPU9250 mpu(i2c, MPU9250::AD0_HIGH);
tanahashi 0:106e97338223 52
tanahashi 0:106e97338223 53 EEPROM eeprom(i2c);
tanahashi 0:106e97338223 54
tanahashi 0:106e97338223 55 Timer mission_timer;
tanahashi 0:106e97338223 56 Timer flight_timer;
tanahashi 0:106e97338223 57 Timer sd_timer;
tanahashi 0:106e97338223 58
tanahashi 5:22adf1eae5e4 59 Ticker downlink_ticker;
tanahashi 0:106e97338223 60 Ticker log_ticker;
tanahashi 5:22adf1eae5e4 61 Ticker debug_ticker;
tanahashi 0:106e97338223 62
tanahashi 5:22adf1eae5e4 63 DigitalIn debug_pin(p17);
tanahashi 5:22adf1eae5e4 64 DigitalIn liftoff_pin(p18);
tanahashi 5:22adf1eae5e4 65 DigitalIn ems_pin(p19);
tanahashi 5:22adf1eae5e4 66 DigitalIn flight_pin(p20);
tanahashi 0:106e97338223 67
tanahashi 5:22adf1eae5e4 68 DigitalOut sep(p21);
tanahashi 5:22adf1eae5e4 69 DigitalOut buzzer(p23);
tanahashi 5:22adf1eae5e4 70 DigitalOut sig(p24);
tanahashi 1:5c46289e3bd1 71
tanahashi 2:104839501493 72 BusOut led(LED1, LED2, LED3, LED4);
tanahashi 0:106e97338223 73
tanahashi 0:106e97338223 74 void init();
tanahashi 0:106e97338223 75 void read();
tanahashi 2:104839501493 76 void command_handler(char *command);
tanahashi 0:106e97338223 77 void downlink();
tanahashi 2:104839501493 78 void log();
tanahashi 2:104839501493 79 void debug();
tanahashi 0:106e97338223 80
tanahashi 1:5c46289e3bd1 81 FILE *sd;
tanahashi 0:106e97338223 82
tanahashi 1:5c46289e3bd1 83 char file_name[64];
tanahashi 1:5c46289e3bd1 84
tanahashi 2:104839501493 85 bool launched = false;
tanahashi 2:104839501493 86 bool burning = false;
tanahashi 2:104839501493 87 bool apogee = false;
tanahashi 2:104839501493 88 int t = 0;
tanahashi 2:104839501493 89
tanahashi 2:104839501493 90 int addr;
tanahashi 0:106e97338223 91
tanahashi 1:5c46289e3bd1 92 char mission_timer_reset;
tanahashi 1:5c46289e3bd1 93 int mission_time;
tanahashi 1:5c46289e3bd1 94 int flight_time;
tanahashi 1:5c46289e3bd1 95 char f_sd;
tanahashi 1:5c46289e3bd1 96 char f_gps;
tanahashi 1:5c46289e3bd1 97 char f_adxl;
tanahashi 1:5c46289e3bd1 98 char f_ina_in;
tanahashi 1:5c46289e3bd1 99 char f_ina_ex;
tanahashi 1:5c46289e3bd1 100 char f_lps;
tanahashi 1:5c46289e3bd1 101 char f_mpu;
tanahashi 1:5c46289e3bd1 102 char f_mpu_ak;
tanahashi 1:5c46289e3bd1 103 enum {
tanahashi 1:5c46289e3bd1 104 SAFETY,
tanahashi 1:5c46289e3bd1 105 READY,
tanahashi 1:5c46289e3bd1 106 FLIGHT,
tanahashi 1:5c46289e3bd1 107 SEP,
tanahashi 1:5c46289e3bd1 108 EMERGENCY,
tanahashi 1:5c46289e3bd1 109 RECOVERY
tanahashi 1:5c46289e3bd1 110 } phase;
tanahashi 1:5c46289e3bd1 111 int utc_hour;
tanahashi 1:5c46289e3bd1 112 int utc_min;
tanahashi 1:5c46289e3bd1 113 float utc_sec;
tanahashi 1:5c46289e3bd1 114 float lat;
tanahashi 1:5c46289e3bd1 115 float lon;
tanahashi 1:5c46289e3bd1 116 int sat;
tanahashi 1:5c46289e3bd1 117 int fix;
tanahashi 1:5c46289e3bd1 118 float hdop;
tanahashi 1:5c46289e3bd1 119 float alt;
tanahashi 1:5c46289e3bd1 120 float geoid;
tanahashi 1:5c46289e3bd1 121 float high_accel[3];
tanahashi 1:5c46289e3bd1 122 float voltage_in;
tanahashi 1:5c46289e3bd1 123 float current_in;
tanahashi 1:5c46289e3bd1 124 float voltage_ex;
tanahashi 1:5c46289e3bd1 125 float current_ex;
tanahashi 1:5c46289e3bd1 126 float press;
tanahashi 1:5c46289e3bd1 127 float temp;
tanahashi 1:5c46289e3bd1 128 float accel[3];
tanahashi 1:5c46289e3bd1 129 float gyro[3];
tanahashi 1:5c46289e3bd1 130 float mag[3];
tanahashi 1:5c46289e3bd1 131
tanahashi 2:104839501493 132 float coef = 0.01;
tanahashi 2:104839501493 133 float press_prev_LPF;
tanahashi 2:104839501493 134 float press_LPF;
tanahashi 2:104839501493 135 float press_LPF_prev;
tanahashi 2:104839501493 136 float press_LPF_diff;
tanahashi 1:5c46289e3bd1 137
tanahashi 1:5c46289e3bd1 138 short mission_time_bits;
tanahashi 1:5c46289e3bd1 139 short flight_time_bits;
tanahashi 1:5c46289e3bd1 140 char flags;
tanahashi 1:5c46289e3bd1 141 short voltage_in_bits;
tanahashi 1:5c46289e3bd1 142 short current_in_bits;
tanahashi 1:5c46289e3bd1 143 short voltage_ex_bits;
tanahashi 1:5c46289e3bd1 144 short current_ex_bits;
tanahashi 1:5c46289e3bd1 145 short press_bits;
tanahashi 1:5c46289e3bd1 146 short temp_bits;
tanahashi 1:5c46289e3bd1 147 short accel_bits[3];
tanahashi 1:5c46289e3bd1 148 short gyro_bits[3];
tanahashi 1:5c46289e3bd1 149 short mag_bits[3];
tanahashi 0:106e97338223 150
tanahashi 0:106e97338223 151 int main()
tanahashi 0:106e97338223 152 {
tanahashi 0:106e97338223 153 mission_timer.start();
tanahashi 1:5c46289e3bd1 154 init();
tanahashi 1:5c46289e3bd1 155
tanahashi 0:106e97338223 156 while(1) {
tanahashi 0:106e97338223 157 read();
tanahashi 1:5c46289e3bd1 158 led = phase;
tanahashi 4:5bc218b2a974 159 if(ems_pin) phase = EMERGENCY;
tanahashi 1:5c46289e3bd1 160 switch(phase) {
tanahashi 1:5c46289e3bd1 161 case SAFETY:
tanahashi 1:5c46289e3bd1 162 break;
tanahashi 1:5c46289e3bd1 163 case READY:
tanahashi 2:104839501493 164 if(flight_pin || liftoff_pin) phase = FLIGHT;
tanahashi 1:5c46289e3bd1 165 break;
tanahashi 1:5c46289e3bd1 166 case FLIGHT:
tanahashi 1:5c46289e3bd1 167 if(!launched) {
tanahashi 1:5c46289e3bd1 168 flight_timer.reset();
tanahashi 1:5c46289e3bd1 169 flight_timer.start();
tanahashi 2:104839501493 170 launched = true;
tanahashi 2:104839501493 171 burning = true;
tanahashi 1:5c46289e3bd1 172 }
tanahashi 2:104839501493 173 if(flight_timer.read() > BURN_TIME) {
tanahashi 2:104839501493 174 if(burning) {
tanahashi 2:104839501493 175 burning = false;
tanahashi 2:104839501493 176 press_LPF_prev = press_LPF;
tanahashi 2:104839501493 177 }
tanahashi 2:104839501493 178 if((flight_timer.read_ms() - t) > 500) {
tanahashi 2:104839501493 179 press_LPF_diff = press_LPF - press_LPF_prev;
tanahashi 2:104839501493 180 press_LPF_prev = press_LPF;
tanahashi 2:104839501493 181 if(press_LPF_diff > 0.0f) {
tanahashi 2:104839501493 182 apogee = true;
tanahashi 3:84d2520b9079 183 } else {
tanahashi 3:84d2520b9079 184 t = flight_timer.read_ms();
tanahashi 2:104839501493 185 }
tanahashi 2:104839501493 186 }
tanahashi 2:104839501493 187 if(!burning && (apogee || flight_timer.read() > T_SEP)) {
tanahashi 1:5c46289e3bd1 188 phase = SEP;
tanahashi 1:5c46289e3bd1 189 }
tanahashi 1:5c46289e3bd1 190 }
tanahashi 1:5c46289e3bd1 191 break;
tanahashi 1:5c46289e3bd1 192 case SEP:
tanahashi 1:5c46289e3bd1 193 buzzer = 1;
tanahashi 1:5c46289e3bd1 194 sep = 1;
tanahashi 1:5c46289e3bd1 195 if(flight_timer.read() > T_RECOVERY) phase = RECOVERY;
tanahashi 1:5c46289e3bd1 196 break;
tanahashi 1:5c46289e3bd1 197 case EMERGENCY:
tanahashi 2:104839501493 198 buzzer = 0;
tanahashi 1:5c46289e3bd1 199 sep = 0;
tanahashi 1:5c46289e3bd1 200 break;
tanahashi 1:5c46289e3bd1 201 case RECOVERY:
tanahashi 2:104839501493 202 buzzer = 1;
tanahashi 1:5c46289e3bd1 203 sep = 0;
tanahashi 1:5c46289e3bd1 204 break;
tanahashi 0:106e97338223 205 }
tanahashi 0:106e97338223 206 }
tanahashi 0:106e97338223 207 }
tanahashi 0:106e97338223 208
tanahashi 0:106e97338223 209 void init()
tanahashi 0:106e97338223 210 {
tanahashi 1:5c46289e3bd1 211 char file_name_format[] = "/sd/IZU2020_AVIONICS_%d.dat";
tanahashi 1:5c46289e3bd1 212 int file_number = 1;
tanahashi 1:5c46289e3bd1 213 while(1) {
tanahashi 1:5c46289e3bd1 214 sprintf(file_name, file_name_format, file_number);
tanahashi 1:5c46289e3bd1 215 sd = fopen(file_name, "r");
tanahashi 1:5c46289e3bd1 216 if(sd != NULL) {
tanahashi 1:5c46289e3bd1 217 fclose(sd);
tanahashi 1:5c46289e3bd1 218 file_number++;
tanahashi 1:5c46289e3bd1 219 } else {
tanahashi 1:5c46289e3bd1 220 sprintf(file_name, "/sd/IZU2020_AVIONICS_%d.dat", file_number);
tanahashi 1:5c46289e3bd1 221 break;
tanahashi 1:5c46289e3bd1 222 }
tanahashi 1:5c46289e3bd1 223 }
tanahashi 1:5c46289e3bd1 224 sd = fopen(file_name, "w");
tanahashi 2:104839501493 225 sd_timer.start();
tanahashi 1:5c46289e3bd1 226
tanahashi 1:5c46289e3bd1 227 if(sd) {
tanahashi 1:5c46289e3bd1 228 fprintf(sd, "mission_timer_reset,");
tanahashi 1:5c46289e3bd1 229 fprintf(sd, "mission_time,");
tanahashi 1:5c46289e3bd1 230 fprintf(sd, "flight_time,");
tanahashi 1:5c46289e3bd1 231 fprintf(sd, "phase,");
tanahashi 1:5c46289e3bd1 232 fprintf(sd, "f_sd,");
tanahashi 1:5c46289e3bd1 233 fprintf(sd, "f_gps,");
tanahashi 1:5c46289e3bd1 234 fprintf(sd, "f_adxl,");
tanahashi 1:5c46289e3bd1 235 fprintf(sd, "f_ina_in,");
tanahashi 1:5c46289e3bd1 236 fprintf(sd, "f_ina_ex,");
tanahashi 1:5c46289e3bd1 237 fprintf(sd, "f_lps,");
tanahashi 1:5c46289e3bd1 238 fprintf(sd, "f_mpu,");
tanahashi 1:5c46289e3bd1 239 fprintf(sd, "f_mpu_ak,");
tanahashi 1:5c46289e3bd1 240 fprintf(sd, "lat,");
tanahashi 1:5c46289e3bd1 241 fprintf(sd, "lon,");
tanahashi 1:5c46289e3bd1 242 fprintf(sd, "sat,");
tanahashi 1:5c46289e3bd1 243 fprintf(sd, "fix,");
tanahashi 1:5c46289e3bd1 244 fprintf(sd, "hdop,");
tanahashi 1:5c46289e3bd1 245 fprintf(sd, "alt,");
tanahashi 1:5c46289e3bd1 246 fprintf(sd, "geoid,");
tanahashi 1:5c46289e3bd1 247 fprintf(sd, "high_accel_x,");
tanahashi 1:5c46289e3bd1 248 fprintf(sd, "high_accel_y,");
tanahashi 1:5c46289e3bd1 249 fprintf(sd, "high_accel_z,");
tanahashi 1:5c46289e3bd1 250 fprintf(sd, "voltage_in,");
tanahashi 1:5c46289e3bd1 251 fprintf(sd, "current_in,");
tanahashi 1:5c46289e3bd1 252 fprintf(sd, "voltage_ex,");
tanahashi 1:5c46289e3bd1 253 fprintf(sd, "current_ex,");
tanahashi 1:5c46289e3bd1 254 fprintf(sd, "press,");
tanahashi 1:5c46289e3bd1 255 fprintf(sd, "temp,");
tanahashi 1:5c46289e3bd1 256 fprintf(sd, "accel_x,");
tanahashi 1:5c46289e3bd1 257 fprintf(sd, "accel_y,");
tanahashi 1:5c46289e3bd1 258 fprintf(sd, "accel_z,");
tanahashi 1:5c46289e3bd1 259 fprintf(sd, "gyro_x,");
tanahashi 1:5c46289e3bd1 260 fprintf(sd, "gyro_y,");
tanahashi 1:5c46289e3bd1 261 fprintf(sd, "gyro_z,");
tanahashi 1:5c46289e3bd1 262 fprintf(sd, "mag_x,");
tanahashi 1:5c46289e3bd1 263 fprintf(sd, "mag_y,");
tanahashi 1:5c46289e3bd1 264 fprintf(sd, "mag_z,");
tanahashi 1:5c46289e3bd1 265 fprintf(sd, "\r\n");
tanahashi 1:5c46289e3bd1 266 }
tanahashi 1:5c46289e3bd1 267
tanahashi 5:22adf1eae5e4 268 debug_pin.mode(PullUp);
tanahashi 1:5c46289e3bd1 269 liftoff_pin.mode(PullDown);
tanahashi 1:5c46289e3bd1 270 ems_pin.mode(PullDown);
tanahashi 1:5c46289e3bd1 271 flight_pin.mode(PullUp);
tanahashi 2:104839501493 272
tanahashi 2:104839501493 273 debug_ticker.attach(debug, 1.0f / DEBUG_RATE);
tanahashi 2:104839501493 274 log_ticker.attach(log, 1.0f / LOG_RATE);
tanahashi 1:5c46289e3bd1 275 downlink_ticker.attach(downlink, 1.0f / DOWNLINK_RATE);
tanahashi 1:5c46289e3bd1 276
tanahashi 1:5c46289e3bd1 277 es.attach(command_handler);
tanahashi 0:106e97338223 278
tanahashi 0:106e97338223 279 adxl.begin();
tanahashi 0:106e97338223 280 ina_in.begin();
tanahashi 0:106e97338223 281 ina_ex.begin();
tanahashi 0:106e97338223 282 lps.begin();
tanahashi 0:106e97338223 283 mpu.begin();
tanahashi 0:106e97338223 284 }
tanahashi 0:106e97338223 285
tanahashi 0:106e97338223 286 void read()
tanahashi 0:106e97338223 287 {
tanahashi 2:104839501493 288 if(mission_timer.read_ms() >= 30*60*1000) {
tanahashi 2:104839501493 289 mission_timer.reset();
tanahashi 2:104839501493 290 mission_timer_reset++;
tanahashi 2:104839501493 291 }
tanahashi 1:5c46289e3bd1 292 mission_time = mission_timer.read_ms();
tanahashi 1:5c46289e3bd1 293 flight_time = flight_timer.read_ms();
tanahashi 0:106e97338223 294
tanahashi 1:5c46289e3bd1 295 utc_hour = gps.get_hour();
tanahashi 1:5c46289e3bd1 296 utc_min = gps.get_min();
tanahashi 1:5c46289e3bd1 297 utc_sec = gps.get_sec();
tanahashi 1:5c46289e3bd1 298 lat = gps.get_lat();
tanahashi 1:5c46289e3bd1 299 lon = gps.get_lon();
tanahashi 1:5c46289e3bd1 300 sat = gps.get_sat();
tanahashi 1:5c46289e3bd1 301 fix = gps.get_fix();
tanahashi 1:5c46289e3bd1 302 hdop = gps.get_hdop();
tanahashi 1:5c46289e3bd1 303 alt = gps.get_alt();
tanahashi 1:5c46289e3bd1 304 geoid = gps.get_geoid();
tanahashi 1:5c46289e3bd1 305
tanahashi 1:5c46289e3bd1 306 f_sd = (bool)sd;
tanahashi 1:5c46289e3bd1 307
tanahashi 2:104839501493 308 f_gps = (bool)fix;
tanahashi 2:104839501493 309
tanahashi 1:5c46289e3bd1 310 f_adxl = adxl.test();
tanahashi 2:104839501493 311 if(f_adxl) {
tanahashi 2:104839501493 312 adxl.read(high_accel);
tanahashi 2:104839501493 313 }
tanahashi 1:5c46289e3bd1 314
tanahashi 1:5c46289e3bd1 315 f_ina_in = ina_in.test();
tanahashi 1:5c46289e3bd1 316 if(f_ina_in) {
tanahashi 1:5c46289e3bd1 317 ina_in.read_voltage(&voltage_in);
tanahashi 1:5c46289e3bd1 318 ina_in.read_current(&current_in);
tanahashi 1:5c46289e3bd1 319 }
tanahashi 0:106e97338223 320
tanahashi 1:5c46289e3bd1 321 f_ina_ex = ina_ex.test();
tanahashi 1:5c46289e3bd1 322 if(f_ina_ex) {
tanahashi 1:5c46289e3bd1 323 ina_ex.read_voltage(&voltage_ex);
tanahashi 1:5c46289e3bd1 324 ina_ex.read_current(&current_ex);
tanahashi 1:5c46289e3bd1 325 }
tanahashi 0:106e97338223 326
tanahashi 1:5c46289e3bd1 327 f_lps = lps.test();
tanahashi 1:5c46289e3bd1 328 if(f_lps) {
tanahashi 1:5c46289e3bd1 329 lps.read_press(&press);
tanahashi 1:5c46289e3bd1 330 lps.read_temp(&temp);
tanahashi 2:104839501493 331
tanahashi 2:104839501493 332 press_LPF = press * coef + press_prev_LPF * (1 - coef);
tanahashi 2:104839501493 333 press_prev_LPF = press_LPF;
tanahashi 1:5c46289e3bd1 334 }
tanahashi 0:106e97338223 335
tanahashi 1:5c46289e3bd1 336 f_mpu = mpu.test();
tanahashi 1:5c46289e3bd1 337 if(f_mpu) {
tanahashi 1:5c46289e3bd1 338 mpu.read_accel(accel);
tanahashi 1:5c46289e3bd1 339 mpu.read_gyro(gyro);
tanahashi 1:5c46289e3bd1 340 }
tanahashi 0:106e97338223 341
tanahashi 1:5c46289e3bd1 342 f_mpu_ak = mpu.test_AK8963();
tanahashi 1:5c46289e3bd1 343 if(f_mpu_ak) {
tanahashi 1:5c46289e3bd1 344 mpu.read_mag(mag);
tanahashi 1:5c46289e3bd1 345 }
tanahashi 0:106e97338223 346 }
tanahashi 0:106e97338223 347
tanahashi 0:106e97338223 348 void command_handler(char *command)
tanahashi 0:106e97338223 349 {
tanahashi 0:106e97338223 350 switch(command[0]) {
tanahashi 1:5c46289e3bd1 351 case 0x80:
tanahashi 1:5c46289e3bd1 352 break;
tanahashi 1:5c46289e3bd1 353 case 0x81:
tanahashi 1:5c46289e3bd1 354 break;
tanahashi 1:5c46289e3bd1 355 case 0x82:
tanahashi 1:5c46289e3bd1 356 break;
tanahashi 1:5c46289e3bd1 357 case 0x83:
tanahashi 1:5c46289e3bd1 358 break;
tanahashi 1:5c46289e3bd1 359 case 0x84:
tanahashi 1:5c46289e3bd1 360 break;
tanahashi 1:5c46289e3bd1 361 case 0x85:
tanahashi 1:5c46289e3bd1 362 break;
tanahashi 1:5c46289e3bd1 363 case 0x86:
tanahashi 1:5c46289e3bd1 364 break;
tanahashi 1:5c46289e3bd1 365 case 0x87:
tanahashi 1:5c46289e3bd1 366 break;
tanahashi 1:5c46289e3bd1 367 case 0x88:
tanahashi 1:5c46289e3bd1 368 break;
tanahashi 1:5c46289e3bd1 369 case 0x89:
tanahashi 1:5c46289e3bd1 370 break;
tanahashi 1:5c46289e3bd1 371 case 0x8A:
tanahashi 1:5c46289e3bd1 372 break;
tanahashi 1:5c46289e3bd1 373 case 0x8B:
tanahashi 1:5c46289e3bd1 374 break;
tanahashi 1:5c46289e3bd1 375 case 0x8C:
tanahashi 1:5c46289e3bd1 376 break;
tanahashi 1:5c46289e3bd1 377 case 0x8D:
tanahashi 1:5c46289e3bd1 378 break;
tanahashi 1:5c46289e3bd1 379 case 0x8E:
tanahashi 1:5c46289e3bd1 380 break;
tanahashi 1:5c46289e3bd1 381 case 0x8F:
tanahashi 1:5c46289e3bd1 382 break;
tanahashi 1:5c46289e3bd1 383 case 0x90:
tanahashi 1:5c46289e3bd1 384 break;
tanahashi 1:5c46289e3bd1 385 case 0x91:
tanahashi 1:5c46289e3bd1 386 break;
tanahashi 1:5c46289e3bd1 387 case 0x92:
tanahashi 1:5c46289e3bd1 388 break;
tanahashi 1:5c46289e3bd1 389 case 0x93:
tanahashi 1:5c46289e3bd1 390 break;
tanahashi 1:5c46289e3bd1 391 case 0x94:
tanahashi 1:5c46289e3bd1 392 break;
tanahashi 1:5c46289e3bd1 393 case 0x95:
tanahashi 1:5c46289e3bd1 394 break;
tanahashi 1:5c46289e3bd1 395 case 0x96:
tanahashi 1:5c46289e3bd1 396 break;
tanahashi 1:5c46289e3bd1 397 case 0x97:
tanahashi 1:5c46289e3bd1 398 break;
tanahashi 1:5c46289e3bd1 399 case 0x98:
tanahashi 1:5c46289e3bd1 400 break;
tanahashi 1:5c46289e3bd1 401 case 0x99:
tanahashi 1:5c46289e3bd1 402 break;
tanahashi 1:5c46289e3bd1 403 case 0x9A:
tanahashi 1:5c46289e3bd1 404 break;
tanahashi 1:5c46289e3bd1 405 case 0x9B:
tanahashi 1:5c46289e3bd1 406 break;
tanahashi 1:5c46289e3bd1 407 case 0x9C:
tanahashi 1:5c46289e3bd1 408 break;
tanahashi 1:5c46289e3bd1 409 case 0x9D:
tanahashi 1:5c46289e3bd1 410 break;
tanahashi 1:5c46289e3bd1 411 case 0x9E:
tanahashi 1:5c46289e3bd1 412 break;
tanahashi 1:5c46289e3bd1 413 case 0x9F:
tanahashi 0:106e97338223 414 break;
tanahashi 1:5c46289e3bd1 415 case 0xA0:
tanahashi 1:5c46289e3bd1 416 break;
tanahashi 1:5c46289e3bd1 417 case 0xA1:
tanahashi 1:5c46289e3bd1 418 break;
tanahashi 1:5c46289e3bd1 419 case 0xA2:
tanahashi 1:5c46289e3bd1 420 break;
tanahashi 1:5c46289e3bd1 421 case 0xA3:
tanahashi 1:5c46289e3bd1 422 break;
tanahashi 1:5c46289e3bd1 423 case 0xA4:
tanahashi 1:5c46289e3bd1 424 break;
tanahashi 1:5c46289e3bd1 425 case 0xA5:
tanahashi 1:5c46289e3bd1 426 break;
tanahashi 1:5c46289e3bd1 427 case 0xA6:
tanahashi 1:5c46289e3bd1 428 break;
tanahashi 1:5c46289e3bd1 429 case 0xA7:
tanahashi 1:5c46289e3bd1 430 break;
tanahashi 1:5c46289e3bd1 431 case 0xA8:
tanahashi 1:5c46289e3bd1 432 break;
tanahashi 1:5c46289e3bd1 433 case 0xA9:
tanahashi 1:5c46289e3bd1 434 break;
tanahashi 1:5c46289e3bd1 435 case 0xAA:
tanahashi 1:5c46289e3bd1 436 break;
tanahashi 1:5c46289e3bd1 437 case 0xAB:
tanahashi 1:5c46289e3bd1 438 break;
tanahashi 1:5c46289e3bd1 439 case 0xAC:
tanahashi 1:5c46289e3bd1 440 break;
tanahashi 1:5c46289e3bd1 441 case 0xAD:
tanahashi 1:5c46289e3bd1 442 break;
tanahashi 1:5c46289e3bd1 443 case 0xAE:
tanahashi 1:5c46289e3bd1 444 break;
tanahashi 1:5c46289e3bd1 445 case 0xAF:
tanahashi 0:106e97338223 446 break;
tanahashi 1:5c46289e3bd1 447 case 0xB0:
tanahashi 1:5c46289e3bd1 448 if(phase == READY) phase = SAFETY;
tanahashi 1:5c46289e3bd1 449 break;
tanahashi 1:5c46289e3bd1 450 case 0xB1:
tanahashi 1:5c46289e3bd1 451 if(phase == SAFETY) phase = READY;
tanahashi 1:5c46289e3bd1 452 break;
tanahashi 1:5c46289e3bd1 453 case 0xB2:
tanahashi 1:5c46289e3bd1 454 if(phase == READY) phase = FLIGHT;
tanahashi 1:5c46289e3bd1 455 break;
tanahashi 1:5c46289e3bd1 456 case 0xB3:
tanahashi 2:104839501493 457 if(!burning & phase == FLIGHT) phase = SEP;
tanahashi 1:5c46289e3bd1 458 break;
tanahashi 1:5c46289e3bd1 459 case 0xB4:
tanahashi 1:5c46289e3bd1 460 if(phase >= FLIGHT & phase <= SEP) phase = EMERGENCY;
tanahashi 1:5c46289e3bd1 461 break;
tanahashi 1:5c46289e3bd1 462 case 0xB5:
tanahashi 1:5c46289e3bd1 463 if(phase == SEP) phase = RECOVERY;
tanahashi 1:5c46289e3bd1 464 break;
tanahashi 1:5c46289e3bd1 465 case 0xB6:
tanahashi 1:5c46289e3bd1 466 break;
tanahashi 1:5c46289e3bd1 467 case 0xB7:
tanahashi 1:5c46289e3bd1 468 break;
tanahashi 1:5c46289e3bd1 469 case 0xB8:
tanahashi 1:5c46289e3bd1 470 break;
tanahashi 1:5c46289e3bd1 471 case 0xB9:
tanahashi 1:5c46289e3bd1 472 break;
tanahashi 1:5c46289e3bd1 473 case 0xBA:
tanahashi 1:5c46289e3bd1 474 break;
tanahashi 1:5c46289e3bd1 475 case 0xBB:
tanahashi 1:5c46289e3bd1 476 break;
tanahashi 1:5c46289e3bd1 477 case 0xBC:
tanahashi 1:5c46289e3bd1 478 break;
tanahashi 1:5c46289e3bd1 479 case 0xBD:
tanahashi 1:5c46289e3bd1 480 break;
tanahashi 1:5c46289e3bd1 481 case 0xBE:
tanahashi 0:106e97338223 482 break;
tanahashi 1:5c46289e3bd1 483 case 0xBF:
tanahashi 1:5c46289e3bd1 484 break;
tanahashi 1:5c46289e3bd1 485 case 0xC0:
tanahashi 1:5c46289e3bd1 486 break;
tanahashi 1:5c46289e3bd1 487 case 0xC1:
tanahashi 1:5c46289e3bd1 488 break;
tanahashi 1:5c46289e3bd1 489 case 0xC2:
tanahashi 1:5c46289e3bd1 490 break;
tanahashi 1:5c46289e3bd1 491 case 0xC3:
tanahashi 1:5c46289e3bd1 492 break;
tanahashi 1:5c46289e3bd1 493 case 0xC4:
tanahashi 1:5c46289e3bd1 494 break;
tanahashi 1:5c46289e3bd1 495 case 0xC5:
tanahashi 1:5c46289e3bd1 496 break;
tanahashi 1:5c46289e3bd1 497 case 0xC6:
tanahashi 1:5c46289e3bd1 498 break;
tanahashi 1:5c46289e3bd1 499 case 0xC7:
tanahashi 1:5c46289e3bd1 500 break;
tanahashi 1:5c46289e3bd1 501 case 0xC8:
tanahashi 1:5c46289e3bd1 502 break;
tanahashi 1:5c46289e3bd1 503 case 0xC9:
tanahashi 1:5c46289e3bd1 504 break;
tanahashi 1:5c46289e3bd1 505 case 0xCA:
tanahashi 1:5c46289e3bd1 506 break;
tanahashi 1:5c46289e3bd1 507 case 0xCB:
tanahashi 1:5c46289e3bd1 508 break;
tanahashi 1:5c46289e3bd1 509 case 0xCC:
tanahashi 1:5c46289e3bd1 510 break;
tanahashi 1:5c46289e3bd1 511 case 0xCD:
tanahashi 1:5c46289e3bd1 512 break;
tanahashi 1:5c46289e3bd1 513 case 0xCE:
tanahashi 1:5c46289e3bd1 514 break;
tanahashi 1:5c46289e3bd1 515 case 0xCF:
tanahashi 1:5c46289e3bd1 516 break;
tanahashi 1:5c46289e3bd1 517 case 0xD0:
tanahashi 1:5c46289e3bd1 518 break;
tanahashi 1:5c46289e3bd1 519 case 0xD1:
tanahashi 1:5c46289e3bd1 520 break;
tanahashi 1:5c46289e3bd1 521 case 0xD2:
tanahashi 1:5c46289e3bd1 522 break;
tanahashi 1:5c46289e3bd1 523 case 0xD3:
tanahashi 1:5c46289e3bd1 524 break;
tanahashi 1:5c46289e3bd1 525 case 0xD4:
tanahashi 1:5c46289e3bd1 526 break;
tanahashi 1:5c46289e3bd1 527 case 0xD5:
tanahashi 1:5c46289e3bd1 528 break;
tanahashi 1:5c46289e3bd1 529 case 0xD6:
tanahashi 1:5c46289e3bd1 530 break;
tanahashi 1:5c46289e3bd1 531 case 0xD7:
tanahashi 1:5c46289e3bd1 532 break;
tanahashi 1:5c46289e3bd1 533 case 0xD8:
tanahashi 1:5c46289e3bd1 534 break;
tanahashi 1:5c46289e3bd1 535 case 0xD9:
tanahashi 1:5c46289e3bd1 536 break;
tanahashi 1:5c46289e3bd1 537 case 0xDA:
tanahashi 1:5c46289e3bd1 538 break;
tanahashi 1:5c46289e3bd1 539 case 0xDB:
tanahashi 1:5c46289e3bd1 540 break;
tanahashi 1:5c46289e3bd1 541 case 0xDC:
tanahashi 1:5c46289e3bd1 542 break;
tanahashi 1:5c46289e3bd1 543 case 0xDD:
tanahashi 1:5c46289e3bd1 544 break;
tanahashi 1:5c46289e3bd1 545 case 0xDE:
tanahashi 1:5c46289e3bd1 546 break;
tanahashi 1:5c46289e3bd1 547 case 0xDF:
tanahashi 1:5c46289e3bd1 548 break;
tanahashi 1:5c46289e3bd1 549 case 0xE0:
tanahashi 0:106e97338223 550 break;
tanahashi 1:5c46289e3bd1 551 case 0xE1:
tanahashi 1:5c46289e3bd1 552 adxl.begin();
tanahashi 1:5c46289e3bd1 553 break;
tanahashi 1:5c46289e3bd1 554 case 0xE2:
tanahashi 1:5c46289e3bd1 555 break;
tanahashi 1:5c46289e3bd1 556 case 0xE3:
tanahashi 1:5c46289e3bd1 557 break;
tanahashi 1:5c46289e3bd1 558 case 0xE4:
tanahashi 1:5c46289e3bd1 559 break;
tanahashi 1:5c46289e3bd1 560 case 0xE5:
tanahashi 1:5c46289e3bd1 561 ina_ex.begin();
tanahashi 1:5c46289e3bd1 562 break;
tanahashi 1:5c46289e3bd1 563 case 0xE6:
tanahashi 1:5c46289e3bd1 564 break;
tanahashi 1:5c46289e3bd1 565 case 0xE7:
tanahashi 1:5c46289e3bd1 566 break;
tanahashi 1:5c46289e3bd1 567 case 0xE8:
tanahashi 1:5c46289e3bd1 568 break;
tanahashi 1:5c46289e3bd1 569 case 0xE9:
tanahashi 1:5c46289e3bd1 570 ina_in.begin();
tanahashi 1:5c46289e3bd1 571 break;
tanahashi 1:5c46289e3bd1 572 case 0xEA:
tanahashi 1:5c46289e3bd1 573 break;
tanahashi 1:5c46289e3bd1 574 case 0xEB:
tanahashi 1:5c46289e3bd1 575 break;
tanahashi 1:5c46289e3bd1 576 case 0xEC:
tanahashi 1:5c46289e3bd1 577 lps.begin();
tanahashi 1:5c46289e3bd1 578 break;
tanahashi 1:5c46289e3bd1 579 case 0xED:
tanahashi 1:5c46289e3bd1 580 mpu.begin();
tanahashi 1:5c46289e3bd1 581 break;
tanahashi 1:5c46289e3bd1 582 case 0xEE:
tanahashi 0:106e97338223 583 break;
tanahashi 1:5c46289e3bd1 584 case 0xEF:
tanahashi 1:5c46289e3bd1 585 break;
tanahashi 1:5c46289e3bd1 586 case 0xF0:
tanahashi 1:5c46289e3bd1 587 break;
tanahashi 1:5c46289e3bd1 588 case 0xF1:
tanahashi 1:5c46289e3bd1 589 break;
tanahashi 1:5c46289e3bd1 590 case 0xF2:
tanahashi 1:5c46289e3bd1 591 break;
tanahashi 1:5c46289e3bd1 592 case 0xF3:
tanahashi 1:5c46289e3bd1 593 break;
tanahashi 1:5c46289e3bd1 594 case 0xF4:
tanahashi 1:5c46289e3bd1 595 break;
tanahashi 1:5c46289e3bd1 596 case 0xF5:
tanahashi 1:5c46289e3bd1 597 break;
tanahashi 1:5c46289e3bd1 598 case 0xF6:
tanahashi 0:106e97338223 599 break;
tanahashi 1:5c46289e3bd1 600 case 0xF7:
tanahashi 1:5c46289e3bd1 601 break;
tanahashi 1:5c46289e3bd1 602 case 0xF8:
tanahashi 1:5c46289e3bd1 603 break;
tanahashi 1:5c46289e3bd1 604 case 0xF9:
tanahashi 1:5c46289e3bd1 605 break;
tanahashi 1:5c46289e3bd1 606 case 0xFA:
tanahashi 1:5c46289e3bd1 607 break;
tanahashi 1:5c46289e3bd1 608 case 0xFB:
tanahashi 1:5c46289e3bd1 609 break;
tanahashi 1:5c46289e3bd1 610 case 0xFC:
tanahashi 1:5c46289e3bd1 611 break;
tanahashi 1:5c46289e3bd1 612 case 0xFD:
tanahashi 1:5c46289e3bd1 613 break;
tanahashi 1:5c46289e3bd1 614 case 0xFE:
tanahashi 1:5c46289e3bd1 615 break;
tanahashi 1:5c46289e3bd1 616 case 0xFF:
tanahashi 1:5c46289e3bd1 617 NVIC_SystemReset();
tanahashi 0:106e97338223 618 break;
tanahashi 0:106e97338223 619 }
tanahashi 0:106e97338223 620 }
tanahashi 0:106e97338223 621
tanahashi 0:106e97338223 622 void downlink()
tanahashi 0:106e97338223 623 {
tanahashi 1:5c46289e3bd1 624 mission_time_bits = (short)(mission_time / TIME_LSB);
tanahashi 1:5c46289e3bd1 625 flight_time_bits = (short)(flight_time / TIME_LSB);
tanahashi 3:84d2520b9079 626 flags = 0;
tanahashi 1:5c46289e3bd1 627 flags |= f_sd << 7;
tanahashi 1:5c46289e3bd1 628 flags |= f_gps << 6;
tanahashi 1:5c46289e3bd1 629 flags |= f_adxl << 5;
tanahashi 1:5c46289e3bd1 630 flags |= f_ina_in << 4;
tanahashi 1:5c46289e3bd1 631 flags |= f_ina_ex << 3;
tanahashi 1:5c46289e3bd1 632 flags |= f_lps << 2;
tanahashi 1:5c46289e3bd1 633 flags |= f_mpu << 1;
tanahashi 1:5c46289e3bd1 634 flags |= f_mpu_ak;
tanahashi 1:5c46289e3bd1 635 voltage_in_bits = (short)(voltage_in / VOLTAGE_LSB);
tanahashi 1:5c46289e3bd1 636 current_in_bits = (short)(current_in / CURRENT_LSB);
tanahashi 1:5c46289e3bd1 637 voltage_ex_bits = (short)(voltage_ex / VOLTAGE_LSB);
tanahashi 1:5c46289e3bd1 638 current_ex_bits = (short)(current_ex / CURRENT_LSB);
tanahashi 1:5c46289e3bd1 639 press_bits = (short)(press / PRESS_LSB);
tanahashi 1:5c46289e3bd1 640 temp_bits = (short)(temp / TEMP_LSB);
tanahashi 1:5c46289e3bd1 641 for(int i = 0; i < 3; i++) {
tanahashi 1:5c46289e3bd1 642 accel_bits[i] = (short)(accel[i] / ACCEL_LSB);
tanahashi 1:5c46289e3bd1 643 }
tanahashi 1:5c46289e3bd1 644 for(int i = 0; i < 3; i++) {
tanahashi 1:5c46289e3bd1 645 gyro_bits[i] = (short)(gyro[i] / GYRO_LSB);
tanahashi 1:5c46289e3bd1 646 }
tanahashi 1:5c46289e3bd1 647 for(int i = 0; i < 3; i++) {
tanahashi 1:5c46289e3bd1 648 mag_bits[i] = (short)(mag[i] / MAG_LSB);
tanahashi 1:5c46289e3bd1 649 }
tanahashi 1:5c46289e3bd1 650
tanahashi 1:5c46289e3bd1 651 char data[50];
tanahashi 1:5c46289e3bd1 652 data[0] = DOWNLINK_HEADER;
tanahashi 1:5c46289e3bd1 653 data[1] = mission_timer_reset;
tanahashi 1:5c46289e3bd1 654 data[2] = ((char*)&mission_time_bits)[0];
tanahashi 1:5c46289e3bd1 655 data[3] = ((char*)&mission_time_bits)[1];
tanahashi 1:5c46289e3bd1 656 data[4] = ((char*)&flight_time_bits)[0];
tanahashi 1:5c46289e3bd1 657 data[5] = ((char*)&flight_time_bits)[1];
tanahashi 1:5c46289e3bd1 658 data[6] = flags;
tanahashi 1:5c46289e3bd1 659 data[7] = phase;
tanahashi 2:104839501493 660 data[8] = ((char*)&lat)[0];
tanahashi 2:104839501493 661 data[9] = ((char*)&lat)[1];
tanahashi 2:104839501493 662 data[10] = ((char*)&lat)[2];
tanahashi 2:104839501493 663 data[11] = ((char*)&lat)[3];
tanahashi 2:104839501493 664 data[12] = ((char*)&lon)[0];
tanahashi 2:104839501493 665 data[13] = ((char*)&lon)[1];
tanahashi 2:104839501493 666 data[14] = ((char*)&lon)[2];
tanahashi 2:104839501493 667 data[15] = ((char*)&lon)[3];
tanahashi 2:104839501493 668 data[16] = ((char*)&alt)[0];
tanahashi 2:104839501493 669 data[17] = ((char*)&alt)[1];
tanahashi 2:104839501493 670 data[18] = ((char*)&alt)[2];
tanahashi 2:104839501493 671 data[19] = ((char*)&alt)[3];
tanahashi 1:5c46289e3bd1 672 data[20] = ((char*)&voltage_in_bits)[0];
tanahashi 1:5c46289e3bd1 673 data[21] = ((char*)&voltage_in_bits)[1];
tanahashi 1:5c46289e3bd1 674 data[22] = ((char*)&current_in_bits)[0];
tanahashi 1:5c46289e3bd1 675 data[23] = ((char*)&current_in_bits)[1];
tanahashi 1:5c46289e3bd1 676 data[24] = ((char*)&voltage_ex_bits)[0];
tanahashi 1:5c46289e3bd1 677 data[25] = ((char*)&voltage_ex_bits)[1];
tanahashi 1:5c46289e3bd1 678 data[26] = ((char*)&current_ex_bits)[0];
tanahashi 1:5c46289e3bd1 679 data[27] = ((char*)&current_ex_bits)[1];
tanahashi 1:5c46289e3bd1 680 data[28] = ((char*)&press_bits)[0];
tanahashi 1:5c46289e3bd1 681 data[29] = ((char*)&press_bits)[1];
tanahashi 1:5c46289e3bd1 682 data[30] = ((char*)&temp_bits)[0];
tanahashi 1:5c46289e3bd1 683 data[31] = ((char*)&temp_bits)[1];
tanahashi 1:5c46289e3bd1 684 data[32] = ((char*)&accel_bits[0])[0];
tanahashi 1:5c46289e3bd1 685 data[33] = ((char*)&accel_bits[0])[1];
tanahashi 1:5c46289e3bd1 686 data[34] = ((char*)&accel_bits[1])[0];
tanahashi 1:5c46289e3bd1 687 data[35] = ((char*)&accel_bits[1])[1];
tanahashi 1:5c46289e3bd1 688 data[36] = ((char*)&accel_bits[2])[0];
tanahashi 1:5c46289e3bd1 689 data[37] = ((char*)&accel_bits[2])[1];
tanahashi 1:5c46289e3bd1 690 data[38] = ((char*)&gyro_bits[0])[0];
tanahashi 1:5c46289e3bd1 691 data[39] = ((char*)&gyro_bits[0])[1];
tanahashi 1:5c46289e3bd1 692 data[40] = ((char*)&gyro_bits[1])[0];
tanahashi 1:5c46289e3bd1 693 data[41] = ((char*)&gyro_bits[1])[1];
tanahashi 1:5c46289e3bd1 694 data[42] = ((char*)&gyro_bits[2])[0];
tanahashi 1:5c46289e3bd1 695 data[43] = ((char*)&gyro_bits[2])[1];
tanahashi 1:5c46289e3bd1 696 data[44] = ((char*)&mag_bits[0])[0];
tanahashi 1:5c46289e3bd1 697 data[45] = ((char*)&mag_bits[0])[1];
tanahashi 1:5c46289e3bd1 698 data[46] = ((char*)&mag_bits[1])[0];
tanahashi 1:5c46289e3bd1 699 data[47] = ((char*)&mag_bits[1])[1];
tanahashi 1:5c46289e3bd1 700 data[48] = ((char*)&mag_bits[2])[0];
tanahashi 1:5c46289e3bd1 701 data[49] = ((char*)&mag_bits[2])[1];
tanahashi 1:5c46289e3bd1 702
tanahashi 1:5c46289e3bd1 703 es.send(data, 50);
tanahashi 1:5c46289e3bd1 704 }
tanahashi 1:5c46289e3bd1 705
tanahashi 0:106e97338223 706 void log()
tanahashi 0:106e97338223 707 {
tanahashi 2:104839501493 708 if(phase >= FLIGHT && phase <= SEP) {
tanahashi 2:104839501493 709 char data[128];
tanahashi 2:104839501493 710 data[0] = LOG_HEADER;
tanahashi 2:104839501493 711 data[1] = ((char*)&mission_timer_reset)[0];
tanahashi 2:104839501493 712 data[2] = ((char*)&mission_time)[0];
tanahashi 2:104839501493 713 data[3] = ((char*)&mission_time)[1];
tanahashi 2:104839501493 714 data[4] = ((char*)&mission_time)[2];
tanahashi 2:104839501493 715 data[5] = ((char*)&mission_time)[3];
tanahashi 2:104839501493 716 data[6] = ((char*)&flight_time)[0];
tanahashi 2:104839501493 717 data[7] = ((char*)&flight_time)[1];
tanahashi 2:104839501493 718 data[8] = ((char*)&flight_time)[2];
tanahashi 2:104839501493 719 data[9] = ((char*)&flight_time)[3];
tanahashi 2:104839501493 720 data[10] = ((char*)&f_sd)[0];
tanahashi 2:104839501493 721 data[11] = ((char*)&f_gps)[0];
tanahashi 2:104839501493 722 data[12] = ((char*)&f_adxl)[0];
tanahashi 2:104839501493 723 data[13] = ((char*)&f_ina_in)[0];
tanahashi 2:104839501493 724 data[14] = ((char*)&f_ina_ex)[0];
tanahashi 2:104839501493 725 data[15] = ((char*)&f_lps)[0];
tanahashi 2:104839501493 726 data[16] = ((char*)&f_mpu)[0];
tanahashi 2:104839501493 727 data[17] = ((char*)&f_mpu_ak)[0];
tanahashi 2:104839501493 728 data[18] = ((char*)&phase)[0];
tanahashi 2:104839501493 729 data[19] = ((char*)&lat)[0];
tanahashi 2:104839501493 730 data[20] = ((char*)&lat)[1];
tanahashi 2:104839501493 731 data[21] = ((char*)&lat)[2];
tanahashi 2:104839501493 732 data[22] = ((char*)&lat)[3];
tanahashi 2:104839501493 733 data[23] = ((char*)&lon)[0];
tanahashi 2:104839501493 734 data[24] = ((char*)&lon)[1];
tanahashi 2:104839501493 735 data[25] = ((char*)&lon)[2];
tanahashi 2:104839501493 736 data[26] = ((char*)&lon)[3];
tanahashi 2:104839501493 737 data[27] = ((char*)&sat)[0];
tanahashi 2:104839501493 738 data[28] = ((char*)&sat)[1];
tanahashi 2:104839501493 739 data[29] = ((char*)&sat)[2];
tanahashi 2:104839501493 740 data[30] = ((char*)&sat)[3];
tanahashi 2:104839501493 741 data[31] = ((char*)&fix)[0];
tanahashi 2:104839501493 742 data[32] = ((char*)&fix)[1];
tanahashi 2:104839501493 743 data[33] = ((char*)&fix)[2];
tanahashi 2:104839501493 744 data[34] = ((char*)&fix)[3];
tanahashi 2:104839501493 745 data[35] = ((char*)&hdop)[0];
tanahashi 2:104839501493 746 data[36] = ((char*)&hdop)[1];
tanahashi 2:104839501493 747 data[37] = ((char*)&hdop)[2];
tanahashi 2:104839501493 748 data[38] = ((char*)&hdop)[3];
tanahashi 2:104839501493 749 data[39] = ((char*)&alt)[0];
tanahashi 2:104839501493 750 data[40] = ((char*)&alt)[1];
tanahashi 2:104839501493 751 data[41] = ((char*)&alt)[2];
tanahashi 2:104839501493 752 data[42] = ((char*)&alt)[3];
tanahashi 2:104839501493 753 data[43] = ((char*)&geoid)[0];
tanahashi 2:104839501493 754 data[44] = ((char*)&geoid)[1];
tanahashi 2:104839501493 755 data[45] = ((char*)&geoid)[2];
tanahashi 2:104839501493 756 data[46] = ((char*)&geoid)[3];
tanahashi 2:104839501493 757 data[47] = ((char*)&high_accel[0])[0];
tanahashi 2:104839501493 758 data[48] = ((char*)&high_accel[0])[1];
tanahashi 2:104839501493 759 data[49] = ((char*)&high_accel[0])[2];
tanahashi 2:104839501493 760 data[50] = ((char*)&high_accel[0])[3];
tanahashi 2:104839501493 761 data[51] = ((char*)&high_accel[1])[0];
tanahashi 2:104839501493 762 data[52] = ((char*)&high_accel[1])[1];
tanahashi 2:104839501493 763 data[53] = ((char*)&high_accel[1])[2];
tanahashi 2:104839501493 764 data[54] = ((char*)&high_accel[1])[3];
tanahashi 2:104839501493 765 data[55] = ((char*)&high_accel[2])[0];
tanahashi 2:104839501493 766 data[56] = ((char*)&high_accel[2])[1];
tanahashi 2:104839501493 767 data[57] = ((char*)&high_accel[2])[2];
tanahashi 2:104839501493 768 data[58] = ((char*)&high_accel[2])[3];
tanahashi 2:104839501493 769 data[59] = ((char*)&voltage_in)[0];
tanahashi 2:104839501493 770 data[60] = ((char*)&voltage_in)[1];
tanahashi 2:104839501493 771 data[61] = ((char*)&voltage_in)[2];
tanahashi 2:104839501493 772 data[62] = ((char*)&voltage_in)[3];
tanahashi 2:104839501493 773 data[63] = ((char*)&current_in)[0];
tanahashi 2:104839501493 774 data[64] = ((char*)&current_in)[1];
tanahashi 2:104839501493 775 data[65] = ((char*)&current_in)[2];
tanahashi 2:104839501493 776 data[66] = ((char*)&current_in)[3];
tanahashi 2:104839501493 777 data[67] = ((char*)&voltage_ex)[0];
tanahashi 2:104839501493 778 data[68] = ((char*)&voltage_ex)[1];
tanahashi 2:104839501493 779 data[69] = ((char*)&voltage_ex)[2];
tanahashi 2:104839501493 780 data[70] = ((char*)&voltage_ex)[3];
tanahashi 2:104839501493 781 data[71] = ((char*)&current_ex)[0];
tanahashi 2:104839501493 782 data[72] = ((char*)&current_ex)[1];
tanahashi 2:104839501493 783 data[73] = ((char*)&current_ex)[2];
tanahashi 2:104839501493 784 data[74] = ((char*)&current_ex)[3];
tanahashi 2:104839501493 785 data[75] = ((char*)&press)[0];
tanahashi 2:104839501493 786 data[76] = ((char*)&press)[1];
tanahashi 2:104839501493 787 data[77] = ((char*)&press)[2];
tanahashi 2:104839501493 788 data[78] = ((char*)&press)[3];
tanahashi 2:104839501493 789 data[79] = ((char*)&temp)[0];
tanahashi 2:104839501493 790 data[80] = ((char*)&temp)[1];
tanahashi 2:104839501493 791 data[81] = ((char*)&temp)[2];
tanahashi 2:104839501493 792 data[82] = ((char*)&temp)[3];
tanahashi 2:104839501493 793 data[83] = ((char*)&accel[0])[0];
tanahashi 2:104839501493 794 data[84] = ((char*)&accel[0])[1];
tanahashi 2:104839501493 795 data[85] = ((char*)&accel[0])[2];
tanahashi 2:104839501493 796 data[86] = ((char*)&accel[0])[3];
tanahashi 2:104839501493 797 data[87] = ((char*)&accel[1])[0];
tanahashi 2:104839501493 798 data[88] = ((char*)&accel[1])[1];
tanahashi 2:104839501493 799 data[89] = ((char*)&accel[1])[2];
tanahashi 2:104839501493 800 data[90] = ((char*)&accel[1])[3];
tanahashi 2:104839501493 801 data[91] = ((char*)&accel[2])[0];
tanahashi 2:104839501493 802 data[92] = ((char*)&accel[2])[1];
tanahashi 2:104839501493 803 data[93] = ((char*)&accel[2])[2];
tanahashi 2:104839501493 804 data[94] = ((char*)&accel[2])[3];
tanahashi 2:104839501493 805 data[95] = ((char*)&gyro[0])[0];
tanahashi 2:104839501493 806 data[96] = ((char*)&gyro[0])[1];
tanahashi 2:104839501493 807 data[97] = ((char*)&gyro[0])[2];
tanahashi 2:104839501493 808 data[98] = ((char*)&gyro[0])[3];
tanahashi 2:104839501493 809 data[99] = ((char*)&gyro[1])[0];
tanahashi 2:104839501493 810 data[100] = ((char*)&gyro[1])[1];
tanahashi 2:104839501493 811 data[101] = ((char*)&gyro[1])[2];
tanahashi 2:104839501493 812 data[102] = ((char*)&gyro[1])[3];
tanahashi 2:104839501493 813 data[103] = ((char*)&gyro[2])[0];
tanahashi 2:104839501493 814 data[104] = ((char*)&gyro[2])[1];
tanahashi 2:104839501493 815 data[105] = ((char*)&gyro[2])[2];
tanahashi 2:104839501493 816 data[106] = ((char*)&gyro[2])[3];
tanahashi 2:104839501493 817 data[107] = ((char*)&mag[0])[0];
tanahashi 2:104839501493 818 data[108] = ((char*)&mag[0])[1];
tanahashi 2:104839501493 819 data[109] = ((char*)&mag[0])[2];
tanahashi 2:104839501493 820 data[110] = ((char*)&mag[0])[3];
tanahashi 2:104839501493 821 data[111] = ((char*)&mag[1])[0];
tanahashi 2:104839501493 822 data[112] = ((char*)&mag[1])[1];
tanahashi 2:104839501493 823 data[113] = ((char*)&mag[1])[2];
tanahashi 2:104839501493 824 data[114] = ((char*)&mag[1])[3];
tanahashi 2:104839501493 825 data[115] = ((char*)&mag[2])[0];
tanahashi 2:104839501493 826 data[116] = ((char*)&mag[2])[1];
tanahashi 2:104839501493 827 data[117] = ((char*)&mag[2])[2];
tanahashi 2:104839501493 828 data[118] = ((char*)&mag[2])[3];
tanahashi 2:104839501493 829 data[119] = 0x00;
tanahashi 2:104839501493 830 data[120] = 0x00;
tanahashi 2:104839501493 831 data[121] = 0x00;
tanahashi 2:104839501493 832 data[122] = 0x00;
tanahashi 2:104839501493 833 data[123] = 0x00;
tanahashi 2:104839501493 834 data[124] = 0x00;
tanahashi 2:104839501493 835 data[125] = 0x00;
tanahashi 2:104839501493 836 data[126] = 0x00;
tanahashi 2:104839501493 837 data[127] = 0x00;
tanahashi 2:104839501493 838
tanahashi 2:104839501493 839 eeprom.write(addr, data, 128);
tanahashi 2:104839501493 840 addr += 0x80;
tanahashi 2:104839501493 841 }
tanahashi 0:106e97338223 842
tanahashi 1:5c46289e3bd1 843 if(sd) {
tanahashi 1:5c46289e3bd1 844 fprintf(sd, "%d,", mission_timer_reset);
tanahashi 1:5c46289e3bd1 845 fprintf(sd, "%d,", mission_time);
tanahashi 1:5c46289e3bd1 846 fprintf(sd, "%d,", flight_time);
tanahashi 1:5c46289e3bd1 847 fprintf(sd, "%d,", phase);
tanahashi 1:5c46289e3bd1 848 fprintf(sd, "%d,", f_sd);
tanahashi 1:5c46289e3bd1 849 fprintf(sd, "%d,", f_gps);
tanahashi 1:5c46289e3bd1 850 fprintf(sd, "%d,", f_adxl);
tanahashi 1:5c46289e3bd1 851 fprintf(sd, "%d,", f_ina_in);
tanahashi 1:5c46289e3bd1 852 fprintf(sd, "%d,", f_ina_ex);
tanahashi 1:5c46289e3bd1 853 fprintf(sd, "%d,", f_lps);
tanahashi 1:5c46289e3bd1 854 fprintf(sd, "%d,", f_mpu);
tanahashi 1:5c46289e3bd1 855 fprintf(sd, "%d,", f_mpu_ak);
tanahashi 1:5c46289e3bd1 856 fprintf(sd, "%f,", lat);
tanahashi 1:5c46289e3bd1 857 fprintf(sd, "%f,", lon);
tanahashi 1:5c46289e3bd1 858 fprintf(sd, "%d,", sat);
tanahashi 1:5c46289e3bd1 859 fprintf(sd, "%d,", fix);
tanahashi 1:5c46289e3bd1 860 fprintf(sd, "%f,", hdop);
tanahashi 1:5c46289e3bd1 861 fprintf(sd, "%f,", alt);
tanahashi 1:5c46289e3bd1 862 fprintf(sd, "%f,", geoid);
tanahashi 1:5c46289e3bd1 863 fprintf(sd, "%f,", high_accel[0]);
tanahashi 1:5c46289e3bd1 864 fprintf(sd, "%f,", high_accel[1]);
tanahashi 1:5c46289e3bd1 865 fprintf(sd, "%f,", high_accel[2]);
tanahashi 1:5c46289e3bd1 866 fprintf(sd, "%f,", voltage_in);
tanahashi 1:5c46289e3bd1 867 fprintf(sd, "%f,", current_in);
tanahashi 1:5c46289e3bd1 868 fprintf(sd, "%f,", voltage_ex);
tanahashi 1:5c46289e3bd1 869 fprintf(sd, "%f,", current_ex);
tanahashi 1:5c46289e3bd1 870 fprintf(sd, "%f,", press);
tanahashi 1:5c46289e3bd1 871 fprintf(sd, "%f,", temp);
tanahashi 1:5c46289e3bd1 872 fprintf(sd, "%f,", accel[0]);
tanahashi 1:5c46289e3bd1 873 fprintf(sd, "%f,", accel[1]);
tanahashi 1:5c46289e3bd1 874 fprintf(sd, "%f,", accel[2]);
tanahashi 1:5c46289e3bd1 875 fprintf(sd, "%f,", gyro[0]);
tanahashi 1:5c46289e3bd1 876 fprintf(sd, "%f,", gyro[1]);
tanahashi 1:5c46289e3bd1 877 fprintf(sd, "%f,", gyro[2]);
tanahashi 1:5c46289e3bd1 878 fprintf(sd, "%f,", mag[0]);
tanahashi 1:5c46289e3bd1 879 fprintf(sd, "%f,", mag[1]);
tanahashi 1:5c46289e3bd1 880 fprintf(sd, "%f,", mag[2]);
tanahashi 1:5c46289e3bd1 881 fprintf(sd, "\r\n");
tanahashi 1:5c46289e3bd1 882 }
tanahashi 0:106e97338223 883
tanahashi 2:104839501493 884 if(sd_timer.read_ms() >= 60*1000) {
tanahashi 0:106e97338223 885 sd_timer.reset();
tanahashi 0:106e97338223 886 sd_timer.start();
tanahashi 1:5c46289e3bd1 887 if(sd) {
tanahashi 1:5c46289e3bd1 888 fclose(sd);
tanahashi 1:5c46289e3bd1 889 sd = fopen(file_name, "a");
tanahashi 0:106e97338223 890 }
tanahashi 0:106e97338223 891 }
tanahashi 2:104839501493 892 }
tanahashi 2:104839501493 893
tanahashi 2:104839501493 894 void debug()
tanahashi 2:104839501493 895 {
tanahashi 5:22adf1eae5e4 896 if(!debug_pin) {
tanahashi 5:22adf1eae5e4 897 pc.printf("mission_timer_reset: %d\r\n", mission_timer_reset);
tanahashi 5:22adf1eae5e4 898 pc.printf("mission_time: %d\r\n", mission_time);
tanahashi 5:22adf1eae5e4 899 pc.printf("flight_time: %d\r\n", flight_time);
tanahashi 5:22adf1eae5e4 900 pc.printf("phase: %d\r\n", phase);
tanahashi 5:22adf1eae5e4 901 pc.printf("f_sd: %d\r\n", f_sd);
tanahashi 5:22adf1eae5e4 902 pc.printf("f_gps: %d\r\n", f_gps);
tanahashi 5:22adf1eae5e4 903 pc.printf("f_adxl: %d\r\n", f_adxl);
tanahashi 5:22adf1eae5e4 904 pc.printf("f_ina_in: %d\r\n", f_ina_in);
tanahashi 5:22adf1eae5e4 905 pc.printf("f_ina_ex: %d\r\n", f_ina_ex);
tanahashi 5:22adf1eae5e4 906 pc.printf("f_lps: %d\r\n", f_lps);
tanahashi 5:22adf1eae5e4 907 pc.printf("f_mpu: %d\r\n", f_mpu);
tanahashi 5:22adf1eae5e4 908 pc.printf("f_mpu_ak: %d\r\n", f_mpu_ak);
tanahashi 5:22adf1eae5e4 909 pc.printf("lat: %f\r\n", lat);
tanahashi 5:22adf1eae5e4 910 pc.printf("lon: %f\r\n", lon);
tanahashi 5:22adf1eae5e4 911 pc.printf("sat: %d\r\n", sat);
tanahashi 5:22adf1eae5e4 912 pc.printf("fix: %d\r\n", fix);
tanahashi 5:22adf1eae5e4 913 pc.printf("hdop: %f\r\n", hdop);
tanahashi 5:22adf1eae5e4 914 pc.printf("alt: %f\r\n", alt);
tanahashi 5:22adf1eae5e4 915 pc.printf("geoid: %f\r\n", geoid);
tanahashi 5:22adf1eae5e4 916 pc.printf("high_accel_x: %f\r\n", high_accel[0]);
tanahashi 5:22adf1eae5e4 917 pc.printf("high_accel_y: %f\r\n", high_accel[1]);
tanahashi 5:22adf1eae5e4 918 pc.printf("high_accel_z: %f\r\n", high_accel[2]);
tanahashi 5:22adf1eae5e4 919 pc.printf("voltage_in: %f\r\n", voltage_in);
tanahashi 5:22adf1eae5e4 920 pc.printf("current_in: %f\r\n", current_in);
tanahashi 5:22adf1eae5e4 921 pc.printf("voltage_ex: %f\r\n", voltage_ex);
tanahashi 5:22adf1eae5e4 922 pc.printf("current_ex: %f\r\n", current_ex);
tanahashi 5:22adf1eae5e4 923 pc.printf("press: %f\r\n", press);
tanahashi 5:22adf1eae5e4 924 pc.printf("temp: %f\r\n", temp);
tanahashi 5:22adf1eae5e4 925 pc.printf("accel_x: %f\r\n", accel[0]);
tanahashi 5:22adf1eae5e4 926 pc.printf("accel_y: %f\r\n", accel[1]);
tanahashi 5:22adf1eae5e4 927 pc.printf("accel_z: %f\r\n", accel[2]);
tanahashi 5:22adf1eae5e4 928 pc.printf("gyro_x: %f\r\n", gyro[0]);
tanahashi 5:22adf1eae5e4 929 pc.printf("gyro_y: %f\r\n", gyro[1]);
tanahashi 5:22adf1eae5e4 930 pc.printf("gyro_z: %f\r\n", gyro[2]);
tanahashi 5:22adf1eae5e4 931 pc.printf("mag_x: %f\r\n", mag[0]);
tanahashi 5:22adf1eae5e4 932 pc.printf("mag_y: %f\r\n", mag[1]);
tanahashi 5:22adf1eae5e4 933 pc.printf("mag_z: %f\r\n", mag[2]);
tanahashi 5:22adf1eae5e4 934 }
tanahashi 0:106e97338223 935 }