高高度CanSat Space SWANの投下時に使用したプログラム.(IZU2019)

Dependencies:   Nichrome_lib mbed ads1115_test BNO055_lib ADXL375_i2c ES920LR CCS811_lib SDFileSystem BME280_lib INA226_lib EEPROM_lib GPS_interrupt

Committer:
Sigma884
Date:
Wed Feb 20 13:33:16 2019 +0000
Revision:
2:a443df6115bc
Parent:
1:6dea30c8b406
Child:
3:4571111a5996
20190220 ver.0.3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sigma884 0:03be138291de 1 #include "mbed.h"
Sigma884 0:03be138291de 2 #include "math.h"
Sigma884 0:03be138291de 3
Sigma884 0:03be138291de 4 #include "Adafruit_ADS1015.h"
Sigma884 0:03be138291de 5 #include "ADXL375_i2c.h"
Sigma884 0:03be138291de 6 #include "BME280_lib.h"
Sigma884 0:03be138291de 7 #include "BNO055_lib.h"
Sigma884 0:03be138291de 8 #include "CCS811_lib.h"
Sigma884 0:03be138291de 9 #include "EEPROM_lib.h"
Sigma884 0:03be138291de 10 #include "ES920LR.hpp"
Sigma884 0:03be138291de 11 #include "GPS_interrupt.h"
Sigma884 0:03be138291de 12 #include "INA226.h"
Sigma884 0:03be138291de 13 #include "Nichrome_lib.h"
Sigma884 0:03be138291de 14 #include "SDFileSystem.h"
Sigma884 0:03be138291de 15
Sigma884 0:03be138291de 16
Sigma884 0:03be138291de 17 /*******************************************************************************
Sigma884 0:03be138291de 18 設定値
Sigma884 0:03be138291de 19 投下前に必ず確認!!
Sigma884 0:03be138291de 20 *******************************************************************************/
Sigma884 1:6dea30c8b406 21 bool wait_GPS = true;
Sigma884 2:a443df6115bc 22 bool ok_PC = false;
Sigma884 0:03be138291de 23
Sigma884 0:03be138291de 24 /*******************************************************************************
Sigma884 0:03be138291de 25 コンストラクタ
Sigma884 0:03be138291de 26 *******************************************************************************/
Sigma884 0:03be138291de 27 RawSerial pc(USBTX, USBRX, 115200);
Sigma884 0:03be138291de 28
Sigma884 0:03be138291de 29 RawSerial serial_es920(p9, p10);
Sigma884 0:03be138291de 30 ES920LR es920(serial_es920, pc, 115200);
Sigma884 0:03be138291de 31
Sigma884 0:03be138291de 32 Serial GPS_serial(p13, p14, 38400);
Sigma884 0:03be138291de 33 GPS_interrupt GPS(&GPS_serial);
Sigma884 0:03be138291de 34 float GPS_freq = 4;
Sigma884 0:03be138291de 35
Sigma884 0:03be138291de 36 SDFileSystem sd(p5, p6, p7, p8, "sd");
Sigma884 0:03be138291de 37 const char file_name[64] = "/sd/Space_SWAN_LOG.txt";
Sigma884 0:03be138291de 38
Sigma884 0:03be138291de 39 I2C i2c_bus(p28, p27);
Sigma884 0:03be138291de 40 ADXL375_i2c ADXL375(i2c_bus, ADXL375_i2c::ALT_ADDRESS_HIGH);
Sigma884 0:03be138291de 41 myINA226 INA226(i2c_bus, myINA226::A1_VDD, myINA226::A0_VDD);
Sigma884 0:03be138291de 42 BME280_lib BME280(i2c_bus, BME280_lib::AD0_LOW);
Sigma884 0:03be138291de 43 BNO055_lib BNO055(i2c_bus, BNO055_lib::AD0_HIGH);
Sigma884 0:03be138291de 44 CCS811_lib CCS811(i2c_bus, CCS811_lib::AD0_LOW);
Sigma884 0:03be138291de 45 EEPROM_lib EEPROM(i2c_bus, 4);
Sigma884 0:03be138291de 46
Sigma884 0:03be138291de 47 Adafruit_ADS1115 ADS1115(&i2c_bus, ADS1015_ADDRESS);
Sigma884 0:03be138291de 48
Sigma884 2:a443df6115bc 49 DigitalOut Valve1(p23);
Sigma884 2:a443df6115bc 50 DigitalOut Valve2(p24);
Sigma884 2:a443df6115bc 51 DigitalOut Valve3(p24);
Sigma884 2:a443df6115bc 52 DigitalOut Valve4(p25);
Sigma884 0:03be138291de 53 DigitalOut Buzzer(p22);
Sigma884 0:03be138291de 54
Sigma884 0:03be138291de 55 DigitalIn FlightPin(p15);
Sigma884 0:03be138291de 56
Sigma884 0:03be138291de 57 Timeout timeout_stop;
Sigma884 0:03be138291de 58 Timeout timeout_sep;
Sigma884 0:03be138291de 59 Timeout timeout_recovery;
Sigma884 0:03be138291de 60
Sigma884 0:03be138291de 61 Timer time_main;
Sigma884 0:03be138291de 62 Timer time_flight;
Sigma884 0:03be138291de 63
Sigma884 0:03be138291de 64 Ticker tick_gps;
Sigma884 0:03be138291de 65 Ticker tick_print;
Sigma884 0:03be138291de 66 Ticker tick_header_data;
Sigma884 0:03be138291de 67
Sigma884 0:03be138291de 68
Sigma884 0:03be138291de 69 /*******************************************************************************
Sigma884 0:03be138291de 70 関数のプロトタイプ宣言
Sigma884 0:03be138291de 71 *******************************************************************************/
Sigma884 0:03be138291de 72 void setup(); //無線あり
Sigma884 0:03be138291de 73
Sigma884 0:03be138291de 74 void modeChange(); //無線あり
Sigma884 0:03be138291de 75
Sigma884 2:a443df6115bc 76 void controllAttitude();
Sigma884 2:a443df6115bc 77
Sigma884 0:03be138291de 78 void readSensor();
Sigma884 0:03be138291de 79 void readGPS();
Sigma884 0:03be138291de 80
Sigma884 0:03be138291de 81 void printData();
Sigma884 0:03be138291de 82 void readPC();
Sigma884 0:03be138291de 83 void printHelp();
Sigma884 0:03be138291de 84
Sigma884 0:03be138291de 85 void sendDownLink();//無線あり
Sigma884 0:03be138291de 86 void readUpLink(); //無線あり
Sigma884 0:03be138291de 87
Sigma884 0:03be138291de 88 void startRecSlow();
Sigma884 0:03be138291de 89 void startRecFast();
Sigma884 0:03be138291de 90 void stopRec();
Sigma884 0:03be138291de 91 void recData();
Sigma884 0:03be138291de 92
Sigma884 2:a443df6115bc 93 void buzzerChange();
Sigma884 2:a443df6115bc 94
Sigma884 0:03be138291de 95
Sigma884 0:03be138291de 96 /*******************************************************************************
Sigma884 0:03be138291de 97 変数の宣言
Sigma884 0:03be138291de 98 *******************************************************************************/
Sigma884 0:03be138291de 99 char CanSat_phase;
Sigma884 0:03be138291de 100 bool do_first = false;
Sigma884 2:a443df6115bc 101 bool controll_yn = false;
Sigma884 2:a443df6115bc 102
Sigma884 2:a443df6115bc 103 bool valve1 = false, valve2 = false, valve3 = false, valve4 = false;
Sigma884 2:a443df6115bc 104 bool buzzer = false;
Sigma884 0:03be138291de 105
Sigma884 0:03be138291de 106 bool es920_using = false;
Sigma884 0:03be138291de 107 char es920_uplink_command = '-';
Sigma884 0:03be138291de 108
Sigma884 0:03be138291de 109 float adxl_acc[3];
Sigma884 0:03be138291de 110
Sigma884 0:03be138291de 111 float ina_v, ina_i;
Sigma884 0:03be138291de 112
Sigma884 0:03be138291de 113 double amg[9], quart[4], euler[3];
Sigma884 0:03be138291de 114
Sigma884 0:03be138291de 115 float pres, temp, hum, alt, pres_0, temp_0;
Sigma884 0:03be138291de 116 float pres_now;
Sigma884 0:03be138291de 117 int speed_time_old;
Sigma884 0:03be138291de 118 float alt_buf[10], alt_ave, alt_ave_old, speed, speed_buf[10], speed_ave;
Sigma884 0:03be138291de 119 int alt_count = 0, speed_count = 0;
Sigma884 0:03be138291de 120
Sigma884 1:6dea30c8b406 121 int CO2, TVOCs;
Sigma884 1:6dea30c8b406 122
Sigma884 1:6dea30c8b406 123 int16_t bottle_pres_bit;
Sigma884 1:6dea30c8b406 124 float bottle_pres;
Sigma884 1:6dea30c8b406 125
Sigma884 0:03be138291de 126 float gps_lat, gps_lon, gps_alt, gps_utc[6], gps_knot, gps_deg;
Sigma884 0:03be138291de 127 int gps_sat;
Sigma884 0:03be138291de 128 bool gps_yn;
Sigma884 0:03be138291de 129
Sigma884 0:03be138291de 130 bool flight_pin;
Sigma884 0:03be138291de 131
Sigma884 0:03be138291de 132 FILE *fp;
Sigma884 0:03be138291de 133 bool save_slow = false;
Sigma884 0:03be138291de 134 bool save_fast = false;
Sigma884 0:03be138291de 135 int save_c = 0;
Sigma884 0:03be138291de 136
Sigma884 0:03be138291de 137 int time_read, time_reset = 0;
Sigma884 0:03be138291de 138 int time_min, time_sec, time_ms;
Sigma884 0:03be138291de 139
Sigma884 0:03be138291de 140 int flight_time_read, flight_time_read_old, flight_time_reset = 0;
Sigma884 0:03be138291de 141 int flight_time_min, flight_time_sec, flight_time_ms;
Sigma884 0:03be138291de 142
Sigma884 0:03be138291de 143
Sigma884 0:03be138291de 144 /*******************************************************************************
Sigma884 0:03be138291de 145 定数
Sigma884 0:03be138291de 146 *******************************************************************************/
Sigma884 2:a443df6115bc 147 const float ES920_MAX_2 = 0.0000305180;
Sigma884 2:a443df6115bc 148 const float ES920_MAX_5 = 0.0000762951;
Sigma884 2:a443df6115bc 149 const float ES920_MAX_20 = 0.0003051804;
Sigma884 2:a443df6115bc 150 const float ES920_MAX_50 = 0.0007629511;
Sigma884 2:a443df6115bc 151 const float ES920_MAX_100 = 0.0015259022;
Sigma884 2:a443df6115bc 152 const float ES920_MAX_200 = 0.0030518044;
Sigma884 2:a443df6115bc 153 const float ES920_MAX_500 = 0.0076295109;
Sigma884 2:a443df6115bc 154 const float ES920_MAX_1500 = 0.0228885328;
Sigma884 0:03be138291de 155
Sigma884 0:03be138291de 156
Sigma884 0:03be138291de 157 /*******************************************************************************
Sigma884 0:03be138291de 158 無線のヘッダまとめ(CANSAT -> GND)
Sigma884 0:03be138291de 159 *******************************************************************************/
Sigma884 0:03be138291de 160 const char HEADER_SENSOR_SETUP = 0x01;
Sigma884 0:03be138291de 161 // 0x01, ADXL, INA, BME, BNO, CCS, PRES, SD
Sigma884 0:03be138291de 162 // 0 1 1 1 1 1 1 1
Sigma884 0:03be138291de 163 // 0 1 2 3 4 5 6
Sigma884 0:03be138291de 164
Sigma884 0:03be138291de 165 const char HEADER_GPS_SETUP = 0x02;
Sigma884 0:03be138291de 166 // 0x02, readable, wait_count
Sigma884 0:03be138291de 167 // 0 1 4
Sigma884 0:03be138291de 168 // 0 1
Sigma884 0:03be138291de 169 // 0x00 : NG
Sigma884 0:03be138291de 170 // 0x01 : OK
Sigma884 0:03be138291de 171 // 0xAA : Finish
Sigma884 0:03be138291de 172 // 0xFF : Ignore
Sigma884 0:03be138291de 173
Sigma884 0:03be138291de 174 const char HEADER_DATA = 0x10;
Sigma884 0:03be138291de 175
Sigma884 0:03be138291de 176 const char HEADER_START = 0x11;
Sigma884 0:03be138291de 177
Sigma884 0:03be138291de 178
Sigma884 0:03be138291de 179 /*******************************************************************************
Sigma884 0:03be138291de 180 無線のヘッダまとめ(GND -> CANSAT)
Sigma884 0:03be138291de 181 *******************************************************************************/
Sigma884 1:6dea30c8b406 182 const char HEADER_COMMAND = 0xcd;
Sigma884 0:03be138291de 183 // 0xcd, command
Sigma884 0:03be138291de 184 // 0 1
Sigma884 0:03be138291de 185 // 0
Sigma884 0:03be138291de 186
Sigma884 0:03be138291de 187
Sigma884 0:03be138291de 188 /*******************************************************************************
Sigma884 0:03be138291de 189 CanSatのフェーズ
Sigma884 0:03be138291de 190 *******************************************************************************/
Sigma884 0:03be138291de 191 const char CANSAT_SETUP = 0x00; //セットアップ中
Sigma884 0:03be138291de 192 const char CANSAT_SAFETY = 0x01; //安全モード
Sigma884 0:03be138291de 193 const char CANSAT_WAIT = 0x02; //待機モード
Sigma884 0:03be138291de 194 const char CANSAT_FLIGHT = 0x03; //フライトモード
Sigma884 0:03be138291de 195 const char CANSAT_RECOVERY = 0x04; //回収モード
Sigma884 0:03be138291de 196
Sigma884 0:03be138291de 197
Sigma884 0:03be138291de 198 /*******************************************************************************
Sigma884 0:03be138291de 199 メイン関数
Sigma884 0:03be138291de 200 *******************************************************************************/
Sigma884 0:03be138291de 201 int main() {
Sigma884 0:03be138291de 202 CanSat_phase = CANSAT_SETUP;
Sigma884 0:03be138291de 203 setup();
Sigma884 0:03be138291de 204
Sigma884 0:03be138291de 205 pc.attach(&readPC, Serial::RxIrq);
Sigma884 0:03be138291de 206
Sigma884 0:03be138291de 207 tick_gps.attach(&readGPS, 1.0/GPS_freq);
Sigma884 0:03be138291de 208 tick_print.attach(&printData, 1.0f);
Sigma884 0:03be138291de 209 tick_header_data.attach(&sendDownLink, 1.0f);
Sigma884 0:03be138291de 210
Sigma884 0:03be138291de 211 es920.attach(&readUpLink, HEADER_COMMAND);
Sigma884 0:03be138291de 212
Sigma884 0:03be138291de 213 FlightPin.mode(PullUp);
Sigma884 0:03be138291de 214
Sigma884 0:03be138291de 215 time_main.reset();
Sigma884 0:03be138291de 216 time_main.start();
Sigma884 0:03be138291de 217 startRecSlow();
Sigma884 0:03be138291de 218
Sigma884 0:03be138291de 219 CanSat_phase = CANSAT_SAFETY;
Sigma884 0:03be138291de 220 while(1) {
Sigma884 0:03be138291de 221 readSensor();
Sigma884 0:03be138291de 222 recData();
Sigma884 0:03be138291de 223 modeChange(); //状態遷移の判断
Sigma884 2:a443df6115bc 224 controllAttitude();
Sigma884 0:03be138291de 225 }
Sigma884 0:03be138291de 226 }
Sigma884 0:03be138291de 227
Sigma884 0:03be138291de 228
Sigma884 0:03be138291de 229 /*******************************************************************************
Sigma884 0:03be138291de 230 状態遷移の判断
Sigma884 0:03be138291de 231 無線あり:HEADER_START
Sigma884 0:03be138291de 232 *******************************************************************************/
Sigma884 1:6dea30c8b406 233 void modeChange(){
Sigma884 2:a443df6115bc 234 switch(CanSat_phase){
Sigma884 2:a443df6115bc 235 case CANSAT_SAFETY:
Sigma884 2:a443df6115bc 236 if(!do_first){
Sigma884 2:a443df6115bc 237
Sigma884 2:a443df6115bc 238 }
Sigma884 2:a443df6115bc 239 break;
Sigma884 2:a443df6115bc 240
Sigma884 2:a443df6115bc 241 case CANSAT_WAIT:
Sigma884 2:a443df6115bc 242 if(!do_first){
Sigma884 2:a443df6115bc 243
Sigma884 2:a443df6115bc 244 }
Sigma884 2:a443df6115bc 245 break;
Sigma884 2:a443df6115bc 246
Sigma884 2:a443df6115bc 247 case CANSAT_FLIGHT:
Sigma884 2:a443df6115bc 248 if(!do_first){
Sigma884 2:a443df6115bc 249
Sigma884 2:a443df6115bc 250 }
Sigma884 2:a443df6115bc 251 break;
Sigma884 2:a443df6115bc 252
Sigma884 2:a443df6115bc 253 case CANSAT_RECOVERY:
Sigma884 2:a443df6115bc 254 if(!do_first){
Sigma884 2:a443df6115bc 255
Sigma884 2:a443df6115bc 256 }
Sigma884 2:a443df6115bc 257 break;
Sigma884 2:a443df6115bc 258 }
Sigma884 2:a443df6115bc 259 }
Sigma884 2:a443df6115bc 260
Sigma884 2:a443df6115bc 261 /*******************************************************************************
Sigma884 2:a443df6115bc 262 姿勢制御
Sigma884 2:a443df6115bc 263 *******************************************************************************/
Sigma884 2:a443df6115bc 264 void controllAttitude(){
Sigma884 1:6dea30c8b406 265
Sigma884 1:6dea30c8b406 266 }
Sigma884 0:03be138291de 267
Sigma884 0:03be138291de 268
Sigma884 0:03be138291de 269 /*******************************************************************************
Sigma884 0:03be138291de 270 センサー読み取り
Sigma884 0:03be138291de 271 *******************************************************************************/
Sigma884 1:6dea30c8b406 272 void readSensor(){
Sigma884 1:6dea30c8b406 273 time_read = time_main.read_ms();
Sigma884 1:6dea30c8b406 274 time_min = time_reset * 30 + floor((double)time_read / (60 * 1000));
Sigma884 1:6dea30c8b406 275 time_sec = time_read % (60 * 1000);
Sigma884 1:6dea30c8b406 276 time_sec = floor((double)time_sec / 1000);
Sigma884 1:6dea30c8b406 277 time_ms = time_read % 1000;
Sigma884 1:6dea30c8b406 278 if(time_read >= 30*60*1000){
Sigma884 1:6dea30c8b406 279 time_main.reset();
Sigma884 1:6dea30c8b406 280 time_reset ++;
Sigma884 1:6dea30c8b406 281 }
Sigma884 1:6dea30c8b406 282
Sigma884 1:6dea30c8b406 283 if(CanSat_phase >= CANSAT_FLIGHT){
Sigma884 1:6dea30c8b406 284 flight_time_read_old = flight_time_read;
Sigma884 1:6dea30c8b406 285 flight_time_read = time_flight.read_ms();
Sigma884 1:6dea30c8b406 286 }
Sigma884 1:6dea30c8b406 287 else{
Sigma884 1:6dea30c8b406 288 flight_time_read = 0;
Sigma884 1:6dea30c8b406 289 }
Sigma884 1:6dea30c8b406 290 flight_time_min = flight_time_reset * 30 + floor((double)flight_time_read / (60 * 1000));
Sigma884 1:6dea30c8b406 291 flight_time_sec = flight_time_read % (60 * 1000);
Sigma884 1:6dea30c8b406 292 flight_time_sec = floor((double)flight_time_sec / 1000);
Sigma884 1:6dea30c8b406 293 flight_time_ms = flight_time_read % 1000;
Sigma884 1:6dea30c8b406 294 if(time_read >= 30*60*1000){
Sigma884 1:6dea30c8b406 295 time_flight.reset();
Sigma884 1:6dea30c8b406 296 flight_time_reset ++;
Sigma884 1:6dea30c8b406 297 }
Sigma884 1:6dea30c8b406 298
Sigma884 1:6dea30c8b406 299 ADXL375.getOutput(adxl_acc);
Sigma884 1:6dea30c8b406 300
Sigma884 1:6dea30c8b406 301 INA226.get_Voltage_current(&ina_v, &ina_i);
Sigma884 1:6dea30c8b406 302 ina_v = ina_v / 1000;
Sigma884 1:6dea30c8b406 303 ina_i = ina_i / 1000;
Sigma884 1:6dea30c8b406 304 if(ina_i > 64){
Sigma884 1:6dea30c8b406 305 ina_i = 0.0f;
Sigma884 1:6dea30c8b406 306 }
Sigma884 1:6dea30c8b406 307
Sigma884 1:6dea30c8b406 308 BME280.getData(&temp, &pres_now, &hum);
Sigma884 1:6dea30c8b406 309 if(pres_now != pres){
Sigma884 1:6dea30c8b406 310 pres = pres_now;
Sigma884 1:6dea30c8b406 311 alt = BME280.getAlt2(pres_0, temp_0);
Sigma884 1:6dea30c8b406 312
Sigma884 1:6dea30c8b406 313 alt_buf[alt_count] = alt;
Sigma884 1:6dea30c8b406 314 alt_count ++;
Sigma884 1:6dea30c8b406 315 if(alt_count > 10){
Sigma884 1:6dea30c8b406 316 alt_count = 0;
Sigma884 1:6dea30c8b406 317 }
Sigma884 1:6dea30c8b406 318 float alt_sum = 0;
Sigma884 1:6dea30c8b406 319 for(int i = 0; i < 10; i ++){
Sigma884 1:6dea30c8b406 320 alt_sum += alt_buf[i];
Sigma884 1:6dea30c8b406 321 }
Sigma884 1:6dea30c8b406 322 alt_ave_old = alt_ave;
Sigma884 1:6dea30c8b406 323 alt_ave = alt_sum / 10;
Sigma884 1:6dea30c8b406 324
Sigma884 1:6dea30c8b406 325 if(fabs(alt_ave - alt_ave_old) > 0.01){
Sigma884 1:6dea30c8b406 326 speed = (alt_ave - alt_ave_old) / (((float)flight_time_read - (float)speed_time_old) / 1000);
Sigma884 1:6dea30c8b406 327 }
Sigma884 1:6dea30c8b406 328 if(CanSat_phase <= CANSAT_WAIT){
Sigma884 1:6dea30c8b406 329 speed = 0.0f;
Sigma884 1:6dea30c8b406 330 }
Sigma884 1:6dea30c8b406 331
Sigma884 1:6dea30c8b406 332 speed_buf[speed_count] = speed;
Sigma884 1:6dea30c8b406 333 speed_count ++;
Sigma884 1:6dea30c8b406 334 if(speed_count > 10){
Sigma884 1:6dea30c8b406 335 speed_count = 0;
Sigma884 1:6dea30c8b406 336 }
Sigma884 1:6dea30c8b406 337 float speed_sum = 0;
Sigma884 1:6dea30c8b406 338 for(int i = 0; i < 10; i ++){
Sigma884 1:6dea30c8b406 339 speed_sum = speed_buf[i];
Sigma884 1:6dea30c8b406 340 }
Sigma884 1:6dea30c8b406 341 speed_ave = speed_sum / 10;
Sigma884 1:6dea30c8b406 342
Sigma884 1:6dea30c8b406 343 speed_time_old = flight_time_read;
Sigma884 1:6dea30c8b406 344 }
Sigma884 1:6dea30c8b406 345
Sigma884 1:6dea30c8b406 346 if(CanSat_phase <= CANSAT_WAIT){
Sigma884 1:6dea30c8b406 347 pres_0 = pres;
Sigma884 1:6dea30c8b406 348 temp_0 = temp;
Sigma884 1:6dea30c8b406 349 }
Sigma884 1:6dea30c8b406 350
Sigma884 1:6dea30c8b406 351 BNO055.getAMG(amg);
Sigma884 1:6dea30c8b406 352 BNO055.getQuart(quart);
Sigma884 1:6dea30c8b406 353 BNO055.getEulerFromQ(euler);
Sigma884 1:6dea30c8b406 354
Sigma884 1:6dea30c8b406 355 CCS811.getData(&CO2, &TVOCs);
Sigma884 1:6dea30c8b406 356
Sigma884 1:6dea30c8b406 357 bottle_pres_bit = ADS1115.readADC_SingleEnded(0);
Sigma884 1:6dea30c8b406 358 bottle_pres_bit = (float)bottle_pres_bit * 0.125f * 3.0f / 2.0f;
Sigma884 1:6dea30c8b406 359 bottle_pres = (float)bottle_pres_bit/1000.0f / 4.0f - 0.25f;
Sigma884 2:a443df6115bc 360
Sigma884 2:a443df6115bc 361 flight_pin = FlightPin;
Sigma884 1:6dea30c8b406 362 }
Sigma884 0:03be138291de 363
Sigma884 0:03be138291de 364
Sigma884 0:03be138291de 365 /*******************************************************************************
Sigma884 0:03be138291de 366 GPS読み取り
Sigma884 0:03be138291de 367 *******************************************************************************/
Sigma884 1:6dea30c8b406 368 void readGPS(){
Sigma884 1:6dea30c8b406 369 gps_yn = GPS.gps_readable;
Sigma884 1:6dea30c8b406 370 if(gps_yn){
Sigma884 1:6dea30c8b406 371 gps_lat = GPS.Latitude();
Sigma884 1:6dea30c8b406 372 gps_lon = GPS.Longitude();
Sigma884 1:6dea30c8b406 373 gps_alt = GPS.Height();
Sigma884 1:6dea30c8b406 374 GPS.getUTC(gps_utc);
Sigma884 1:6dea30c8b406 375 gps_utc[3] += 9;
Sigma884 1:6dea30c8b406 376 if(gps_utc[3] >= 24){
Sigma884 1:6dea30c8b406 377 gps_utc[3] -= 24;
Sigma884 1:6dea30c8b406 378 gps_utc[2] += 1;
Sigma884 1:6dea30c8b406 379 }
Sigma884 1:6dea30c8b406 380 gps_knot = GPS.Knot();
Sigma884 1:6dea30c8b406 381 gps_deg = GPS.Degree();
Sigma884 1:6dea30c8b406 382 gps_sat = GPS.Number();
Sigma884 1:6dea30c8b406 383 }
Sigma884 1:6dea30c8b406 384 }
Sigma884 0:03be138291de 385
Sigma884 0:03be138291de 386
Sigma884 0:03be138291de 387 /*******************************************************************************
Sigma884 0:03be138291de 388 データ表示
Sigma884 0:03be138291de 389 *******************************************************************************/
Sigma884 1:6dea30c8b406 390 void printData(){
Sigma884 2:a443df6115bc 391 if(ok_PC){
Sigma884 2:a443df6115bc 392 pc.printf("Time : %d:%02d\r\n", time_min, time_sec);
Sigma884 2:a443df6115bc 393 pc.printf("FlightTime : %d:%02d\r\n", flight_time_min, flight_time_sec);
Sigma884 2:a443df6115bc 394
Sigma884 2:a443df6115bc 395 pc.printf("Phase : ");
Sigma884 2:a443df6115bc 396 switch(CanSat_phase){
Sigma884 2:a443df6115bc 397 case CANSAT_SETUP:
Sigma884 2:a443df6115bc 398 pc.printf("SETUP\r\n");
Sigma884 2:a443df6115bc 399 break;
Sigma884 2:a443df6115bc 400 case CANSAT_SAFETY:
Sigma884 2:a443df6115bc 401 pc.printf("SAFETY\r\n");
Sigma884 2:a443df6115bc 402 break;
Sigma884 2:a443df6115bc 403 case CANSAT_WAIT:
Sigma884 2:a443df6115bc 404 pc.printf("WAIT\r\n");
Sigma884 2:a443df6115bc 405 break;
Sigma884 2:a443df6115bc 406 case CANSAT_FLIGHT:
Sigma884 2:a443df6115bc 407 pc.printf("FLIGHT\r\n");
Sigma884 2:a443df6115bc 408 break;
Sigma884 2:a443df6115bc 409 case CANSAT_RECOVERY:
Sigma884 2:a443df6115bc 410 pc.printf("RECOVERY\r\n");
Sigma884 2:a443df6115bc 411 break;
Sigma884 2:a443df6115bc 412 }
Sigma884 2:a443df6115bc 413
Sigma884 2:a443df6115bc 414 pc.printf("SAVE : ");
Sigma884 2:a443df6115bc 415 if(save_slow){
Sigma884 2:a443df6115bc 416 pc.printf("SLOW\r\n");
Sigma884 2:a443df6115bc 417 }
Sigma884 2:a443df6115bc 418 else if(save_fast){
Sigma884 2:a443df6115bc 419 pc.printf("FAST\r\n");
Sigma884 2:a443df6115bc 420 }
Sigma884 2:a443df6115bc 421 else{
Sigma884 2:a443df6115bc 422 pc.printf("STOP\r\n");
Sigma884 2:a443df6115bc 423 }
Sigma884 2:a443df6115bc 424
Sigma884 2:a443df6115bc 425 pc.printf("Controll : %d\r\n", controll_yn);
Sigma884 2:a443df6115bc 426
Sigma884 2:a443df6115bc 427 pc.printf("Flight Pin : %d\r\n", flight_pin);
Sigma884 2:a443df6115bc 428 pc.printf("Valve: %d, %d, %d, %d\r\n", valve1, valve2, valve3, valve4);
Sigma884 2:a443df6115bc 429 pc.printf("Buzzer : %d\r\n", buzzer);
Sigma884 2:a443df6115bc 430
Sigma884 2:a443df6115bc 431 pc.printf("GPS : %3.7f, %3.7f, %.2f\r\n", gps_lat, gps_lon, gps_alt);
Sigma884 2:a443df6115bc 432 pc.printf("Move : %.2f[knot], %.2f[deg]\r\n", gps_knot, gps_deg);
Sigma884 2:a443df6115bc 433 pc.printf("Sats : %d\r\n", gps_sat);
Sigma884 2:a443df6115bc 434
Sigma884 2:a443df6115bc 435 pc.printf("INA226 : %.2f[V], %.2f[A]\r\n", ina_v, ina_i);
Sigma884 2:a443df6115bc 436 pc.printf("BME280 : %.2f[hPa], %.2f[degC], %.2f[%%], %.2f[m], %.2f[m/s]\r\n", pres, temp, hum, alt_ave, speed_ave);
Sigma884 2:a443df6115bc 437 pc.printf("BNO055 : %f, %f, %f\r\n", euler[0], euler[1], euler[2]);
Sigma884 2:a443df6115bc 438 pc.printf("CCS811 : %d[ppm], %d[ppm]\r\n", CO2, TVOCs);
Sigma884 2:a443df6115bc 439 pc.printf("Bottle : %f[MPa]\r\n", bottle_pres);
Sigma884 2:a443df6115bc 440
Sigma884 2:a443df6115bc 441 pc.printf("\n\n\n");
Sigma884 2:a443df6115bc 442 }
Sigma884 1:6dea30c8b406 443 }
Sigma884 0:03be138291de 444
Sigma884 0:03be138291de 445
Sigma884 0:03be138291de 446 /*******************************************************************************
Sigma884 0:03be138291de 447 PC読み取り
Sigma884 0:03be138291de 448 *******************************************************************************/
Sigma884 1:6dea30c8b406 449 void readPC(){
Sigma884 2:a443df6115bc 450 if(ok_PC){
Sigma884 2:a443df6115bc 451 char command = pc.getc();
Sigma884 2:a443df6115bc 452 pc.printf("PC Command : %c\r\n", command);
Sigma884 2:a443df6115bc 453
Sigma884 2:a443df6115bc 454 switch(command){
Sigma884 2:a443df6115bc 455 case '?': //ヘルプ表示
Sigma884 2:a443df6115bc 456 printHelp();
Sigma884 2:a443df6115bc 457 break;
Sigma884 2:a443df6115bc 458
Sigma884 2:a443df6115bc 459 case 'W': //投下待機モードへ移行
Sigma884 2:a443df6115bc 460 if(CanSat_phase == CANSAT_SAFETY){
Sigma884 2:a443df6115bc 461 CanSat_phase = CANSAT_WAIT;
Sigma884 2:a443df6115bc 462 do_first = false;
Sigma884 2:a443df6115bc 463 }
Sigma884 2:a443df6115bc 464 break;
Sigma884 2:a443df6115bc 465
Sigma884 2:a443df6115bc 466 case 'S': //安全モードへ移行
Sigma884 2:a443df6115bc 467 if(CanSat_phase == CANSAT_WAIT || CanSat_phase == CANSAT_FLIGHT){
Sigma884 2:a443df6115bc 468 CanSat_phase = CANSAT_SAFETY;
Sigma884 2:a443df6115bc 469 do_first = false;
Sigma884 2:a443df6115bc 470 }
Sigma884 2:a443df6115bc 471 break;
Sigma884 2:a443df6115bc 472
Sigma884 2:a443df6115bc 473 case 'F': //フライトモードへ移行
Sigma884 2:a443df6115bc 474 if(CanSat_phase == CANSAT_WAIT){
Sigma884 2:a443df6115bc 475 CanSat_phase = CANSAT_FLIGHT;
Sigma884 2:a443df6115bc 476 do_first = false;
Sigma884 2:a443df6115bc 477 }
Sigma884 2:a443df6115bc 478 break;
Sigma884 2:a443df6115bc 479
Sigma884 2:a443df6115bc 480 case 'C': //記録停止
Sigma884 2:a443df6115bc 481 if((CanSat_phase == CANSAT_RECOVERY || CanSat_phase == CANSAT_SAFETY) && (save_slow || save_fast)){
Sigma884 2:a443df6115bc 482 stopRec();
Sigma884 2:a443df6115bc 483 }
Sigma884 2:a443df6115bc 484 break;
Sigma884 2:a443df6115bc 485
Sigma884 2:a443df6115bc 486 case 'o': //低速記録開始
Sigma884 2:a443df6115bc 487 if(CanSat_phase == CANSAT_RECOVERY || CanSat_phase == CANSAT_SAFETY && (!save_slow && !save_fast)){
Sigma884 2:a443df6115bc 488 startRecSlow();
Sigma884 2:a443df6115bc 489 }
Sigma884 2:a443df6115bc 490 break;
Sigma884 2:a443df6115bc 491
Sigma884 2:a443df6115bc 492 case 'O': //高速記録開始
Sigma884 2:a443df6115bc 493 if(CanSat_phase == CANSAT_RECOVERY || CanSat_phase == CANSAT_SAFETY && (!save_slow && !save_fast)){
Sigma884 2:a443df6115bc 494 startRecFast();
Sigma884 2:a443df6115bc 495 }
Sigma884 2:a443df6115bc 496 break;
Sigma884 2:a443df6115bc 497
Sigma884 2:a443df6115bc 498 case 'B': //ブザー切り替え
Sigma884 2:a443df6115bc 499 buzzerChange();
Sigma884 2:a443df6115bc 500 break;
Sigma884 2:a443df6115bc 501
Sigma884 2:a443df6115bc 502 case '1': //姿勢制御再開
Sigma884 2:a443df6115bc 503 if(CanSat_phase == CANSAT_FLIGHT && !controll_yn){
Sigma884 2:a443df6115bc 504 controll_yn = true;
Sigma884 2:a443df6115bc 505 }
Sigma884 2:a443df6115bc 506 break;
Sigma884 2:a443df6115bc 507
Sigma884 2:a443df6115bc 508 case '0': //姿勢制御停止
Sigma884 2:a443df6115bc 509 if(CanSat_phase == CANSAT_FLIGHT && controll_yn){
Sigma884 2:a443df6115bc 510 controll_yn = false;
Sigma884 2:a443df6115bc 511 }
Sigma884 2:a443df6115bc 512 break;
Sigma884 2:a443df6115bc 513 }
Sigma884 2:a443df6115bc 514 }
Sigma884 1:6dea30c8b406 515 }
Sigma884 0:03be138291de 516
Sigma884 0:03be138291de 517
Sigma884 0:03be138291de 518 /*******************************************************************************
Sigma884 0:03be138291de 519 ヘルプ表示
Sigma884 0:03be138291de 520 *******************************************************************************/
Sigma884 1:6dea30c8b406 521 void printHelp(){
Sigma884 2:a443df6115bc 522 pc.printf("\r\n********************\r\n");
Sigma884 2:a443df6115bc 523 pc.printf("Commands\r\n");
Sigma884 1:6dea30c8b406 524
Sigma884 2:a443df6115bc 525 pc.printf("W : Safety -> Wait\r\n");
Sigma884 2:a443df6115bc 526 pc.printf("S : Wait -> Safety\r\n");
Sigma884 2:a443df6115bc 527 pc.printf("F : Wait -> Flight\r\n");
Sigma884 2:a443df6115bc 528 pc.printf("C : Stop Recording\r\n");
Sigma884 2:a443df6115bc 529 pc.printf("o(small o) : Start Recording (Slow)\r\n");
Sigma884 2:a443df6115bc 530 pc.printf("O(large o) : Start Recording (Fast)\r\n");
Sigma884 2:a443df6115bc 531 pc.printf("B : Buzzer Change\r\n");
Sigma884 2:a443df6115bc 532 pc.printf("1(one) : Restart Controll Attitude\r\n");
Sigma884 2:a443df6115bc 533 pc.printf("0(zero) : Stop Controll Attitude\r\n");
Sigma884 2:a443df6115bc 534
Sigma884 2:a443df6115bc 535 pc.printf("********************\r\n\n");
Sigma884 2:a443df6115bc 536 wait(1.0f);
Sigma884 1:6dea30c8b406 537 }
Sigma884 0:03be138291de 538
Sigma884 0:03be138291de 539
Sigma884 0:03be138291de 540 /*******************************************************************************
Sigma884 0:03be138291de 541 ダウンリンク送信
Sigma884 0:03be138291de 542 無線あり:HEADER_DATA
Sigma884 0:03be138291de 543 *******************************************************************************/
Sigma884 1:6dea30c8b406 544 void sendDownLink(){
Sigma884 2:a443df6115bc 545 if(!es920_using){
Sigma884 2:a443df6115bc 546 es920 << HEADER_DATA;
Sigma884 2:a443df6115bc 547
Sigma884 2:a443df6115bc 548 es920 << (short)time_reset;
Sigma884 2:a443df6115bc 549 es920 << (short)(time_read / 1000);
Sigma884 2:a443df6115bc 550
Sigma884 2:a443df6115bc 551 es920 << (short)flight_time_reset;
Sigma884 2:a443df6115bc 552 es920 << (short)(flight_time_read / 1000);
Sigma884 2:a443df6115bc 553
Sigma884 2:a443df6115bc 554 es920 << CanSat_phase;
Sigma884 2:a443df6115bc 555
Sigma884 2:a443df6115bc 556 char status = 0x00;
Sigma884 2:a443df6115bc 557 if(save_slow) status |= (char)0x01;
Sigma884 2:a443df6115bc 558 if(save_fast) status |= (char)0x02;
Sigma884 2:a443df6115bc 559 if(controll_yn) status |= (char)0x04;
Sigma884 2:a443df6115bc 560 if(flight_pin) status |= (char)0x08;
Sigma884 2:a443df6115bc 561 if(Buzzer) status |= (char)0x10;
Sigma884 2:a443df6115bc 562 es920 << status;
Sigma884 2:a443df6115bc 563
Sigma884 2:a443df6115bc 564 if(valve1) status |= (char)0x01;
Sigma884 2:a443df6115bc 565 if(valve2) status |= (char)0x02;
Sigma884 2:a443df6115bc 566 if(valve3) status |= (char)0x04;
Sigma884 2:a443df6115bc 567 if(valve4) status |= (char)0x08;
Sigma884 2:a443df6115bc 568 es920 << status;
Sigma884 2:a443df6115bc 569
Sigma884 2:a443df6115bc 570 es920 << (float)gps_lat;
Sigma884 2:a443df6115bc 571 es920 << (float)gps_lon;
Sigma884 2:a443df6115bc 572 es920 << (unsigned short)(gps_alt / ES920_MAX_1500);
Sigma884 2:a443df6115bc 573 es920 << (unsigned short)(gps_knot / ES920_MAX_200);
Sigma884 2:a443df6115bc 574 es920 << (unsigned short)(gps_deg / ES920_MAX_500);
Sigma884 2:a443df6115bc 575 es920 << (short)gps_sat;
Sigma884 2:a443df6115bc 576
Sigma884 2:a443df6115bc 577 es920 << (unsigned short)(ina_v / ES920_MAX_20);
Sigma884 2:a443df6115bc 578 es920 << (unsigned short)(ina_i / ES920_MAX_20);
Sigma884 2:a443df6115bc 579
Sigma884 2:a443df6115bc 580 es920 << (unsigned short)(pres / ES920_MAX_1500);
Sigma884 2:a443df6115bc 581 es920 << (unsigned short)(temp / ES920_MAX_100);
Sigma884 2:a443df6115bc 582 es920 << (unsigned short)(alt / ES920_MAX_500);
Sigma884 2:a443df6115bc 583 es920 << (unsigned short)(speed / ES920_MAX_50);
Sigma884 2:a443df6115bc 584
Sigma884 2:a443df6115bc 585 es920 << (short)(euler[0] / ES920_MAX_5);
Sigma884 2:a443df6115bc 586 es920 << (short)(euler[1] / ES920_MAX_5);
Sigma884 2:a443df6115bc 587 es920 << (short)(euler[2] / ES920_MAX_5);
Sigma884 2:a443df6115bc 588
Sigma884 2:a443df6115bc 589 es920 << (unsigned short)CO2;
Sigma884 2:a443df6115bc 590 es920 << (unsigned short)TVOCs;
Sigma884 2:a443df6115bc 591
Sigma884 2:a443df6115bc 592 es920 << (unsigned short)(bottle_pres / ES920_MAX_2);
Sigma884 2:a443df6115bc 593
Sigma884 2:a443df6115bc 594 es920.send();
Sigma884 2:a443df6115bc 595 }
Sigma884 1:6dea30c8b406 596 }
Sigma884 0:03be138291de 597
Sigma884 0:03be138291de 598
Sigma884 0:03be138291de 599 /*******************************************************************************
Sigma884 0:03be138291de 600 アップリンク受信
Sigma884 2:a443df6115bc 601 無線あり:HEADER_COMMAND
Sigma884 0:03be138291de 602 *******************************************************************************/
Sigma884 1:6dea30c8b406 603 void readUpLink(){
Sigma884 1:6dea30c8b406 604
Sigma884 1:6dea30c8b406 605 }
Sigma884 0:03be138291de 606
Sigma884 0:03be138291de 607
Sigma884 0:03be138291de 608 /*******************************************************************************
Sigma884 0:03be138291de 609 データを1秒ごとに書き込み開始
Sigma884 0:03be138291de 610 *******************************************************************************/
Sigma884 1:6dea30c8b406 611 void startRecSlow(){
Sigma884 1:6dea30c8b406 612
Sigma884 1:6dea30c8b406 613 }
Sigma884 0:03be138291de 614
Sigma884 0:03be138291de 615
Sigma884 0:03be138291de 616 /*******************************************************************************
Sigma884 0:03be138291de 617 データを最速で書き込み開始
Sigma884 0:03be138291de 618 *******************************************************************************/
Sigma884 1:6dea30c8b406 619 void startRecFast(){
Sigma884 1:6dea30c8b406 620
Sigma884 1:6dea30c8b406 621 }
Sigma884 0:03be138291de 622
Sigma884 0:03be138291de 623
Sigma884 0:03be138291de 624 /*******************************************************************************
Sigma884 0:03be138291de 625 データ記録停止
Sigma884 0:03be138291de 626 *******************************************************************************/
Sigma884 1:6dea30c8b406 627 void stopRec(){
Sigma884 1:6dea30c8b406 628
Sigma884 1:6dea30c8b406 629 }
Sigma884 0:03be138291de 630
Sigma884 0:03be138291de 631
Sigma884 0:03be138291de 632 /*******************************************************************************
Sigma884 0:03be138291de 633 データの記録
Sigma884 0:03be138291de 634 *******************************************************************************/
Sigma884 1:6dea30c8b406 635 void recData(){
Sigma884 1:6dea30c8b406 636
Sigma884 1:6dea30c8b406 637 }
Sigma884 0:03be138291de 638
Sigma884 0:03be138291de 639
Sigma884 0:03be138291de 640 /*******************************************************************************
Sigma884 2:a443df6115bc 641 ブザーのオンオフ切り替え
Sigma884 2:a443df6115bc 642 *******************************************************************************/
Sigma884 2:a443df6115bc 643 void buzzerChange(){
Sigma884 2:a443df6115bc 644
Sigma884 2:a443df6115bc 645 }
Sigma884 2:a443df6115bc 646
Sigma884 2:a443df6115bc 647
Sigma884 2:a443df6115bc 648 /*******************************************************************************
Sigma884 0:03be138291de 649 セットアップ(最初に1回実行)
Sigma884 0:03be138291de 650 無線あり:HEADER_SETUP_SENSOR
Sigma884 0:03be138291de 651 無線あり:HEADER_GPS_SETUP
Sigma884 0:03be138291de 652 *******************************************************************************/
Sigma884 0:03be138291de 653 void setup(){
Sigma884 0:03be138291de 654 wait(1.0f);
Sigma884 0:03be138291de 655 char setup_string[1024];
Sigma884 0:03be138291de 656
Sigma884 0:03be138291de 657 pc.printf("\r\n******************************\r\n");
Sigma884 0:03be138291de 658 pc.printf("Sensor Setting Start!!\r\n");
Sigma884 0:03be138291de 659 strcat(setup_string, "Sensor Setting Start!!\r\n");
Sigma884 0:03be138291de 660 es920 << HEADER_SENSOR_SETUP;
Sigma884 0:03be138291de 661
Sigma884 0:03be138291de 662 //////////////////////////////////////////////////ADXL375
Sigma884 0:03be138291de 663 ADXL375.setDataRate(ADXL375_100HZ);
Sigma884 0:03be138291de 664 if(ADXL375.whoAmI() == 1){
Sigma884 0:03be138291de 665 pc.printf("ADXL375 : OK\r\n");
Sigma884 0:03be138291de 666 strcat(setup_string, "ADXL375 : OK\r\n");
Sigma884 0:03be138291de 667 es920 << (char)0x01;
Sigma884 0:03be138291de 668 }
Sigma884 0:03be138291de 669 else{
Sigma884 0:03be138291de 670 pc.printf("ADXL375 : NG\r\n");
Sigma884 0:03be138291de 671 strcat(setup_string, "ADXL375 : NG\r\n");
Sigma884 0:03be138291de 672 es920 << (char)0x00;
Sigma884 0:03be138291de 673 }
Sigma884 0:03be138291de 674 ADXL375.offset(0.0f, 0.0f, 0.0f);
Sigma884 0:03be138291de 675
Sigma884 0:03be138291de 676 //////////////////////////////////////////////////INA226
Sigma884 0:03be138291de 677 INA226.set_callibretion();
Sigma884 0:03be138291de 678 if(INA226.Connection_check() == 0){
Sigma884 0:03be138291de 679 pc.printf("INA226 : OK\r\n");
Sigma884 0:03be138291de 680 strcat(setup_string, "INA226 : OK!!\r\n");
Sigma884 0:03be138291de 681 es920 << (char)0x01;
Sigma884 0:03be138291de 682 }
Sigma884 0:03be138291de 683 else{
Sigma884 0:03be138291de 684 pc.printf("INA226 : NG\r\n");
Sigma884 0:03be138291de 685 strcat(setup_string, "INA226 : NG\r\n");
Sigma884 0:03be138291de 686 es920 << (char)0x00;
Sigma884 0:03be138291de 687 }
Sigma884 0:03be138291de 688
Sigma884 0:03be138291de 689 //////////////////////////////////////////////////BME280
Sigma884 0:03be138291de 690 BME280.configMeasure(BME280_lib::NORMAL, 1, 2, 1);
Sigma884 0:03be138291de 691 BME280.configFilter(4);
Sigma884 0:03be138291de 692 if(BME280.connectCheck() == 1){
Sigma884 0:03be138291de 693 pc.printf("BME280 OK!!\r\n");
Sigma884 0:03be138291de 694 strcat(setup_string, "BME280 : OK!!\r\n");
Sigma884 0:03be138291de 695 es920 << (char)0x01;
Sigma884 0:03be138291de 696 }
Sigma884 0:03be138291de 697 else{
Sigma884 0:03be138291de 698 pc.printf("BME280 NG\r\n");
Sigma884 0:03be138291de 699 strcat(setup_string, "BME280 : NG\r\n");
Sigma884 0:03be138291de 700 es920 << (char)0x00;
Sigma884 0:03be138291de 701 }
Sigma884 0:03be138291de 702
Sigma884 0:03be138291de 703 //////////////////////////////////////////////////BNO055
Sigma884 0:03be138291de 704 BNO055.setOperationMode(BNO055_lib::CONFIG);
Sigma884 0:03be138291de 705 BNO055.setAccRange(BNO055_lib::_16G);
Sigma884 0:03be138291de 706 BNO055.setAxis(BNO055_lib::Z, BNO055_lib::Y, BNO055_lib::X);
Sigma884 0:03be138291de 707 BNO055.setAxisPM(1, 1, -1);
Sigma884 0:03be138291de 708 if(BNO055.connectCheck() == 1){
Sigma884 0:03be138291de 709 pc.printf("BNO055 OK!!\r\n");
Sigma884 0:03be138291de 710 strcat(setup_string, "BNO055 : OK!!\r\n");
Sigma884 0:03be138291de 711 es920 << (char)0x01;
Sigma884 0:03be138291de 712 }
Sigma884 0:03be138291de 713 else{
Sigma884 0:03be138291de 714 pc.printf("BNO055 NG\r\n");
Sigma884 0:03be138291de 715 strcat(setup_string, "BNO055 : NG\r\n");
Sigma884 0:03be138291de 716 es920 << (char)0x00;
Sigma884 0:03be138291de 717 }
Sigma884 1:6dea30c8b406 718 BNO055.setOperationMode(BNO055_lib::NDOF);
Sigma884 0:03be138291de 719
Sigma884 0:03be138291de 720 //////////////////////////////////////////////////CCS811
Sigma884 0:03be138291de 721 if(CCS811.connectCheck() == 1){
Sigma884 0:03be138291de 722 pc.printf("CCS811 OK!!\r\n");
Sigma884 0:03be138291de 723 strcat(setup_string, "CCS811 : OK!!\r\n");
Sigma884 0:03be138291de 724 es920 << (char)0x01;
Sigma884 0:03be138291de 725 }
Sigma884 0:03be138291de 726 else{
Sigma884 0:03be138291de 727 pc.printf("CCS811 NG\r\n");
Sigma884 0:03be138291de 728 strcat(setup_string, "CCS811 : NG\r\n");
Sigma884 0:03be138291de 729 es920 << (char)0x00;
Sigma884 0:03be138291de 730 }
Sigma884 0:03be138291de 731
Sigma884 0:03be138291de 732 //////////////////////////////////////////////////圧力センサ
Sigma884 0:03be138291de 733 pc.printf("PRES : ");
Sigma884 0:03be138291de 734 ADS1115.setGain(GAIN_TWOTHIRDS);
Sigma884 0:03be138291de 735 pc.printf("OK!!\r\n");
Sigma884 0:03be138291de 736 strcat(setup_string, "PRES : OK!!\r\n");
Sigma884 0:03be138291de 737 es920 << (char)0x01;
Sigma884 0:03be138291de 738
Sigma884 0:03be138291de 739 //////////////////////////////////////////////////SD
Sigma884 0:03be138291de 740 fp = fopen("/sd/Space_SWAN_setup.txt", "r");
Sigma884 0:03be138291de 741 if(fp != NULL){
Sigma884 0:03be138291de 742 pc.printf("SD : OK!!\r\n");
Sigma884 0:03be138291de 743 strcat(setup_string, "SD : OK!!\r\n");
Sigma884 0:03be138291de 744 es920 << (char)0x01;
Sigma884 0:03be138291de 745 fclose(fp);
Sigma884 0:03be138291de 746 }
Sigma884 0:03be138291de 747 else{
Sigma884 0:03be138291de 748 pc.printf("SD : NG...\r\n");
Sigma884 0:03be138291de 749 strcat(setup_string, "SD : NG...\r\n");
Sigma884 0:03be138291de 750 es920 << (char)0x00;
Sigma884 0:03be138291de 751 }
Sigma884 0:03be138291de 752
Sigma884 0:03be138291de 753 pc.printf("Sensor Setting Finished!!\r\n");
Sigma884 0:03be138291de 754 pc.printf("******************************\r\n");
Sigma884 0:03be138291de 755 strcat(setup_string, "Sensor Setting Finished!!\r\n");
Sigma884 0:03be138291de 756 es920.send();
Sigma884 0:03be138291de 757 wait(1.0f);
Sigma884 0:03be138291de 758
Sigma884 0:03be138291de 759 pc.printf("\r\n******************************\r\n");
Sigma884 0:03be138291de 760 if(wait_GPS){
Sigma884 0:03be138291de 761 pc.printf("GPS Setting Start!!\r\n");
Sigma884 0:03be138291de 762 strcat(setup_string, "GPS Setting Start!!\r\n");
Sigma884 0:03be138291de 763
Sigma884 0:03be138291de 764 pc.printf("Waiting : 0");
Sigma884 0:03be138291de 765 strcat(setup_string, "Wait : ");
Sigma884 0:03be138291de 766 int gps_wait_count = 0;
Sigma884 0:03be138291de 767 while(!GPS.gps_readable){
Sigma884 0:03be138291de 768 pc.printf("\rWaiting : %d", gps_wait_count);//
Sigma884 0:03be138291de 769 es920 << HEADER_GPS_SETUP;
Sigma884 0:03be138291de 770 es920 << (char)GPS.gps_readable;
Sigma884 0:03be138291de 771 es920 << (int)gps_wait_count;
Sigma884 0:03be138291de 772 es920.send();
Sigma884 0:03be138291de 773 wait(1.0f);
Sigma884 0:03be138291de 774 gps_wait_count ++;
Sigma884 0:03be138291de 775 }
Sigma884 0:03be138291de 776 char ss[8];
Sigma884 0:03be138291de 777 sprintf(ss, "%d", gps_wait_count);
Sigma884 0:03be138291de 778 strcat(setup_string, ss);
Sigma884 0:03be138291de 779 pc.printf(" OK!!\r\n");
Sigma884 0:03be138291de 780 strcat(setup_string, " OK!!\r\n");
Sigma884 0:03be138291de 781 pc.printf("GPS Setting Finished!!\r\n");
Sigma884 0:03be138291de 782 strcat(setup_string, "GPS Setting Finished!!\r\n");
Sigma884 0:03be138291de 783 es920 << HEADER_GPS_SETUP;
Sigma884 0:03be138291de 784 es920 << (char)0xAA;
Sigma884 0:03be138291de 785 es920 << (int)0;
Sigma884 0:03be138291de 786 es920.send();
Sigma884 0:03be138291de 787 }
Sigma884 0:03be138291de 788 else{
Sigma884 0:03be138291de 789 pc.printf("GPS Setting Ignore...\r\n");
Sigma884 0:03be138291de 790 strcat(setup_string, "GPS Setting Ignore...\r\n");
Sigma884 0:03be138291de 791 es920 << HEADER_GPS_SETUP;
Sigma884 0:03be138291de 792 es920 << (char)0xFF;
Sigma884 0:03be138291de 793 es920 << (int)0;
Sigma884 0:03be138291de 794 es920.send();
Sigma884 0:03be138291de 795 }
Sigma884 0:03be138291de 796 pc.printf("******************************\r\n");
Sigma884 0:03be138291de 797 fp = fopen(file_name, "a");
Sigma884 0:03be138291de 798 fprintf(fp, setup_string);
Sigma884 0:03be138291de 799 fclose(fp);
Sigma884 0:03be138291de 800 setup_string[0] = NULL;
Sigma884 0:03be138291de 801
Sigma884 0:03be138291de 802 printHelp();
Sigma884 0:03be138291de 803 wait(1.0f);
Sigma884 0:03be138291de 804 }