高高度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:
Tue Feb 19 15:56:55 2019 +0000
Revision:
1:6dea30c8b406
Parent:
0:03be138291de
Child:
2:a443df6115bc
20190220 ver.0.2

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 0:03be138291de 22
Sigma884 0:03be138291de 23 /*******************************************************************************
Sigma884 0:03be138291de 24 コンストラクタ
Sigma884 0:03be138291de 25 *******************************************************************************/
Sigma884 0:03be138291de 26 RawSerial pc(USBTX, USBRX, 115200);
Sigma884 0:03be138291de 27
Sigma884 0:03be138291de 28 RawSerial serial_es920(p9, p10);
Sigma884 0:03be138291de 29 ES920LR es920(serial_es920, pc, 115200);
Sigma884 0:03be138291de 30
Sigma884 0:03be138291de 31 Serial GPS_serial(p13, p14, 38400);
Sigma884 0:03be138291de 32 GPS_interrupt GPS(&GPS_serial);
Sigma884 0:03be138291de 33 float GPS_freq = 4;
Sigma884 0:03be138291de 34
Sigma884 0:03be138291de 35 SDFileSystem sd(p5, p6, p7, p8, "sd");
Sigma884 0:03be138291de 36 const char file_name[64] = "/sd/Space_SWAN_LOG.txt";
Sigma884 0:03be138291de 37
Sigma884 0:03be138291de 38 I2C i2c_bus(p28, p27);
Sigma884 0:03be138291de 39 ADXL375_i2c ADXL375(i2c_bus, ADXL375_i2c::ALT_ADDRESS_HIGH);
Sigma884 0:03be138291de 40 myINA226 INA226(i2c_bus, myINA226::A1_VDD, myINA226::A0_VDD);
Sigma884 0:03be138291de 41 BME280_lib BME280(i2c_bus, BME280_lib::AD0_LOW);
Sigma884 0:03be138291de 42 BNO055_lib BNO055(i2c_bus, BNO055_lib::AD0_HIGH);
Sigma884 0:03be138291de 43 CCS811_lib CCS811(i2c_bus, CCS811_lib::AD0_LOW);
Sigma884 0:03be138291de 44 EEPROM_lib EEPROM(i2c_bus, 4);
Sigma884 0:03be138291de 45
Sigma884 0:03be138291de 46 Adafruit_ADS1115 ADS1115(&i2c_bus, ADS1015_ADDRESS);
Sigma884 0:03be138291de 47
Sigma884 0:03be138291de 48 DigitalOut valve1(p23);
Sigma884 0:03be138291de 49 DigitalOut valve2(p24);
Sigma884 0:03be138291de 50 DigitalOut valve3(p24);
Sigma884 0:03be138291de 51 DigitalOut valve4(p25);
Sigma884 0:03be138291de 52 DigitalOut Buzzer(p22);
Sigma884 0:03be138291de 53
Sigma884 0:03be138291de 54 DigitalIn FlightPin(p15);
Sigma884 0:03be138291de 55
Sigma884 0:03be138291de 56 Timeout timeout_stop;
Sigma884 0:03be138291de 57 Timeout timeout_sep;
Sigma884 0:03be138291de 58 Timeout timeout_recovery;
Sigma884 0:03be138291de 59
Sigma884 0:03be138291de 60 Timer time_main;
Sigma884 0:03be138291de 61 Timer time_flight;
Sigma884 0:03be138291de 62
Sigma884 0:03be138291de 63 Ticker tick_gps;
Sigma884 0:03be138291de 64 Ticker tick_print;
Sigma884 0:03be138291de 65 Ticker tick_header_data;
Sigma884 0:03be138291de 66
Sigma884 0:03be138291de 67
Sigma884 0:03be138291de 68 /*******************************************************************************
Sigma884 0:03be138291de 69 関数のプロトタイプ宣言
Sigma884 0:03be138291de 70 *******************************************************************************/
Sigma884 0:03be138291de 71 void setup(); //無線あり
Sigma884 0:03be138291de 72
Sigma884 0:03be138291de 73 void modeChange(); //無線あり
Sigma884 0:03be138291de 74
Sigma884 0:03be138291de 75 void readSensor();
Sigma884 0:03be138291de 76 void readGPS();
Sigma884 0:03be138291de 77
Sigma884 0:03be138291de 78 void printData();
Sigma884 0:03be138291de 79 void readPC();
Sigma884 0:03be138291de 80 void printHelp();
Sigma884 0:03be138291de 81
Sigma884 0:03be138291de 82 void sendDownLink();//無線あり
Sigma884 0:03be138291de 83 void readUpLink(); //無線あり
Sigma884 0:03be138291de 84
Sigma884 0:03be138291de 85 void startRecSlow();
Sigma884 0:03be138291de 86 void startRecFast();
Sigma884 0:03be138291de 87 void stopRec();
Sigma884 0:03be138291de 88 void recData();
Sigma884 0:03be138291de 89
Sigma884 0:03be138291de 90
Sigma884 0:03be138291de 91 /*******************************************************************************
Sigma884 0:03be138291de 92 変数の宣言
Sigma884 0:03be138291de 93 *******************************************************************************/
Sigma884 0:03be138291de 94 char CanSat_phase;
Sigma884 0:03be138291de 95 bool do_first = false;
Sigma884 0:03be138291de 96
Sigma884 0:03be138291de 97 bool es920_using = false;
Sigma884 0:03be138291de 98 char es920_uplink_command = '-';
Sigma884 0:03be138291de 99
Sigma884 0:03be138291de 100 float adxl_acc[3];
Sigma884 0:03be138291de 101
Sigma884 0:03be138291de 102 float ina_v, ina_i;
Sigma884 0:03be138291de 103
Sigma884 0:03be138291de 104 double amg[9], quart[4], euler[3];
Sigma884 0:03be138291de 105
Sigma884 0:03be138291de 106 float pres, temp, hum, alt, pres_0, temp_0;
Sigma884 0:03be138291de 107 float pres_now;
Sigma884 0:03be138291de 108 int speed_time_old;
Sigma884 0:03be138291de 109 float alt_buf[10], alt_ave, alt_ave_old, speed, speed_buf[10], speed_ave;
Sigma884 0:03be138291de 110 int alt_count = 0, speed_count = 0;
Sigma884 0:03be138291de 111
Sigma884 1:6dea30c8b406 112 int CO2, TVOCs;
Sigma884 1:6dea30c8b406 113
Sigma884 1:6dea30c8b406 114 int16_t bottle_pres_bit;
Sigma884 1:6dea30c8b406 115 float bottle_pres;
Sigma884 1:6dea30c8b406 116
Sigma884 0:03be138291de 117 float gps_lat, gps_lon, gps_alt, gps_utc[6], gps_knot, gps_deg;
Sigma884 0:03be138291de 118 int gps_sat;
Sigma884 0:03be138291de 119 bool gps_yn;
Sigma884 0:03be138291de 120
Sigma884 0:03be138291de 121 bool flight_pin;
Sigma884 0:03be138291de 122
Sigma884 0:03be138291de 123 FILE *fp;
Sigma884 0:03be138291de 124 bool save_slow = false;
Sigma884 0:03be138291de 125 bool save_fast = false;
Sigma884 0:03be138291de 126 int save_c = 0;
Sigma884 0:03be138291de 127
Sigma884 0:03be138291de 128 int time_read, time_reset = 0;
Sigma884 0:03be138291de 129 int time_min, time_sec, time_ms;
Sigma884 0:03be138291de 130
Sigma884 0:03be138291de 131 int flight_time_read, flight_time_read_old, flight_time_reset = 0;
Sigma884 0:03be138291de 132 int flight_time_min, flight_time_sec, flight_time_ms;
Sigma884 0:03be138291de 133
Sigma884 0:03be138291de 134
Sigma884 0:03be138291de 135 /*******************************************************************************
Sigma884 0:03be138291de 136 定数
Sigma884 0:03be138291de 137 *******************************************************************************/
Sigma884 0:03be138291de 138
Sigma884 0:03be138291de 139
Sigma884 0:03be138291de 140 /*******************************************************************************
Sigma884 0:03be138291de 141 無線のヘッダまとめ(CANSAT -> GND)
Sigma884 0:03be138291de 142 *******************************************************************************/
Sigma884 0:03be138291de 143 const char HEADER_SENSOR_SETUP = 0x01;
Sigma884 0:03be138291de 144 // 0x01, ADXL, INA, BME, BNO, CCS, PRES, SD
Sigma884 0:03be138291de 145 // 0 1 1 1 1 1 1 1
Sigma884 0:03be138291de 146 // 0 1 2 3 4 5 6
Sigma884 0:03be138291de 147
Sigma884 0:03be138291de 148 const char HEADER_GPS_SETUP = 0x02;
Sigma884 0:03be138291de 149 // 0x02, readable, wait_count
Sigma884 0:03be138291de 150 // 0 1 4
Sigma884 0:03be138291de 151 // 0 1
Sigma884 0:03be138291de 152 // 0x00 : NG
Sigma884 0:03be138291de 153 // 0x01 : OK
Sigma884 0:03be138291de 154 // 0xAA : Finish
Sigma884 0:03be138291de 155 // 0xFF : Ignore
Sigma884 0:03be138291de 156
Sigma884 0:03be138291de 157 const char HEADER_DATA = 0x10;
Sigma884 0:03be138291de 158
Sigma884 0:03be138291de 159 const char HEADER_START = 0x11;
Sigma884 0:03be138291de 160
Sigma884 0:03be138291de 161
Sigma884 0:03be138291de 162 /*******************************************************************************
Sigma884 0:03be138291de 163 無線のヘッダまとめ(GND -> CANSAT)
Sigma884 0:03be138291de 164 *******************************************************************************/
Sigma884 1:6dea30c8b406 165 const char HEADER_COMMAND = 0xcd;
Sigma884 0:03be138291de 166 // 0xcd, command
Sigma884 0:03be138291de 167 // 0 1
Sigma884 0:03be138291de 168 // 0
Sigma884 0:03be138291de 169
Sigma884 0:03be138291de 170
Sigma884 0:03be138291de 171 /*******************************************************************************
Sigma884 0:03be138291de 172 CanSatのフェーズ
Sigma884 0:03be138291de 173 *******************************************************************************/
Sigma884 0:03be138291de 174 const char CANSAT_SETUP = 0x00; //セットアップ中
Sigma884 0:03be138291de 175 const char CANSAT_SAFETY = 0x01; //安全モード
Sigma884 0:03be138291de 176 const char CANSAT_WAIT = 0x02; //待機モード
Sigma884 0:03be138291de 177 const char CANSAT_FLIGHT = 0x03; //フライトモード
Sigma884 0:03be138291de 178 const char CANSAT_RECOVERY = 0x04; //回収モード
Sigma884 0:03be138291de 179
Sigma884 0:03be138291de 180
Sigma884 0:03be138291de 181 /*******************************************************************************
Sigma884 0:03be138291de 182 メイン関数
Sigma884 0:03be138291de 183 *******************************************************************************/
Sigma884 0:03be138291de 184 int main() {
Sigma884 0:03be138291de 185 CanSat_phase = CANSAT_SETUP;
Sigma884 0:03be138291de 186 setup();
Sigma884 0:03be138291de 187
Sigma884 0:03be138291de 188 pc.attach(&readPC, Serial::RxIrq);
Sigma884 0:03be138291de 189
Sigma884 0:03be138291de 190 tick_gps.attach(&readGPS, 1.0/GPS_freq);
Sigma884 0:03be138291de 191 tick_print.attach(&printData, 1.0f);
Sigma884 0:03be138291de 192 tick_header_data.attach(&sendDownLink, 1.0f);
Sigma884 0:03be138291de 193
Sigma884 0:03be138291de 194 es920.attach(&readUpLink, HEADER_COMMAND);
Sigma884 0:03be138291de 195
Sigma884 0:03be138291de 196 FlightPin.mode(PullUp);
Sigma884 0:03be138291de 197
Sigma884 0:03be138291de 198 time_main.reset();
Sigma884 0:03be138291de 199 time_main.start();
Sigma884 0:03be138291de 200 startRecSlow();
Sigma884 0:03be138291de 201
Sigma884 0:03be138291de 202 CanSat_phase = CANSAT_SAFETY;
Sigma884 0:03be138291de 203 while(1) {
Sigma884 0:03be138291de 204 readSensor();
Sigma884 0:03be138291de 205 recData();
Sigma884 0:03be138291de 206 modeChange(); //状態遷移の判断
Sigma884 0:03be138291de 207 }
Sigma884 0:03be138291de 208 }
Sigma884 0:03be138291de 209
Sigma884 0:03be138291de 210
Sigma884 0:03be138291de 211 /*******************************************************************************
Sigma884 0:03be138291de 212 状態遷移の判断
Sigma884 0:03be138291de 213 無線あり:HEADER_START
Sigma884 0:03be138291de 214 *******************************************************************************/
Sigma884 1:6dea30c8b406 215 void modeChange(){
Sigma884 1:6dea30c8b406 216
Sigma884 1:6dea30c8b406 217 }
Sigma884 0:03be138291de 218
Sigma884 0:03be138291de 219
Sigma884 0:03be138291de 220 /*******************************************************************************
Sigma884 0:03be138291de 221 センサー読み取り
Sigma884 0:03be138291de 222 *******************************************************************************/
Sigma884 1:6dea30c8b406 223 void readSensor(){
Sigma884 1:6dea30c8b406 224 time_read = time_main.read_ms();
Sigma884 1:6dea30c8b406 225 time_min = time_reset * 30 + floor((double)time_read / (60 * 1000));
Sigma884 1:6dea30c8b406 226 time_sec = time_read % (60 * 1000);
Sigma884 1:6dea30c8b406 227 time_sec = floor((double)time_sec / 1000);
Sigma884 1:6dea30c8b406 228 time_ms = time_read % 1000;
Sigma884 1:6dea30c8b406 229 if(time_read >= 30*60*1000){
Sigma884 1:6dea30c8b406 230 time_main.reset();
Sigma884 1:6dea30c8b406 231 time_reset ++;
Sigma884 1:6dea30c8b406 232 }
Sigma884 1:6dea30c8b406 233
Sigma884 1:6dea30c8b406 234 if(CanSat_phase >= CANSAT_FLIGHT){
Sigma884 1:6dea30c8b406 235 flight_time_read_old = flight_time_read;
Sigma884 1:6dea30c8b406 236 flight_time_read = time_flight.read_ms();
Sigma884 1:6dea30c8b406 237 }
Sigma884 1:6dea30c8b406 238 else{
Sigma884 1:6dea30c8b406 239 flight_time_read = 0;
Sigma884 1:6dea30c8b406 240 }
Sigma884 1:6dea30c8b406 241 flight_time_min = flight_time_reset * 30 + floor((double)flight_time_read / (60 * 1000));
Sigma884 1:6dea30c8b406 242 flight_time_sec = flight_time_read % (60 * 1000);
Sigma884 1:6dea30c8b406 243 flight_time_sec = floor((double)flight_time_sec / 1000);
Sigma884 1:6dea30c8b406 244 flight_time_ms = flight_time_read % 1000;
Sigma884 1:6dea30c8b406 245 if(time_read >= 30*60*1000){
Sigma884 1:6dea30c8b406 246 time_flight.reset();
Sigma884 1:6dea30c8b406 247 flight_time_reset ++;
Sigma884 1:6dea30c8b406 248 }
Sigma884 1:6dea30c8b406 249
Sigma884 1:6dea30c8b406 250 ADXL375.getOutput(adxl_acc);
Sigma884 1:6dea30c8b406 251
Sigma884 1:6dea30c8b406 252 INA226.get_Voltage_current(&ina_v, &ina_i);
Sigma884 1:6dea30c8b406 253 ina_v = ina_v / 1000;
Sigma884 1:6dea30c8b406 254 ina_i = ina_i / 1000;
Sigma884 1:6dea30c8b406 255 if(ina_i > 64){
Sigma884 1:6dea30c8b406 256 ina_i = 0.0f;
Sigma884 1:6dea30c8b406 257 }
Sigma884 1:6dea30c8b406 258
Sigma884 1:6dea30c8b406 259 BME280.getData(&temp, &pres_now, &hum);
Sigma884 1:6dea30c8b406 260 if(pres_now != pres){
Sigma884 1:6dea30c8b406 261 pres = pres_now;
Sigma884 1:6dea30c8b406 262 alt = BME280.getAlt2(pres_0, temp_0);
Sigma884 1:6dea30c8b406 263
Sigma884 1:6dea30c8b406 264 alt_buf[alt_count] = alt;
Sigma884 1:6dea30c8b406 265 alt_count ++;
Sigma884 1:6dea30c8b406 266 if(alt_count > 10){
Sigma884 1:6dea30c8b406 267 alt_count = 0;
Sigma884 1:6dea30c8b406 268 }
Sigma884 1:6dea30c8b406 269 float alt_sum = 0;
Sigma884 1:6dea30c8b406 270 for(int i = 0; i < 10; i ++){
Sigma884 1:6dea30c8b406 271 alt_sum += alt_buf[i];
Sigma884 1:6dea30c8b406 272 }
Sigma884 1:6dea30c8b406 273 alt_ave_old = alt_ave;
Sigma884 1:6dea30c8b406 274 alt_ave = alt_sum / 10;
Sigma884 1:6dea30c8b406 275
Sigma884 1:6dea30c8b406 276 if(fabs(alt_ave - alt_ave_old) > 0.01){
Sigma884 1:6dea30c8b406 277 speed = (alt_ave - alt_ave_old) / (((float)flight_time_read - (float)speed_time_old) / 1000);
Sigma884 1:6dea30c8b406 278 }
Sigma884 1:6dea30c8b406 279 if(CanSat_phase <= CANSAT_WAIT){
Sigma884 1:6dea30c8b406 280 speed = 0.0f;
Sigma884 1:6dea30c8b406 281 }
Sigma884 1:6dea30c8b406 282
Sigma884 1:6dea30c8b406 283 speed_buf[speed_count] = speed;
Sigma884 1:6dea30c8b406 284 speed_count ++;
Sigma884 1:6dea30c8b406 285 if(speed_count > 10){
Sigma884 1:6dea30c8b406 286 speed_count = 0;
Sigma884 1:6dea30c8b406 287 }
Sigma884 1:6dea30c8b406 288 float speed_sum = 0;
Sigma884 1:6dea30c8b406 289 for(int i = 0; i < 10; i ++){
Sigma884 1:6dea30c8b406 290 speed_sum = speed_buf[i];
Sigma884 1:6dea30c8b406 291 }
Sigma884 1:6dea30c8b406 292 speed_ave = speed_sum / 10;
Sigma884 1:6dea30c8b406 293
Sigma884 1:6dea30c8b406 294 speed_time_old = flight_time_read;
Sigma884 1:6dea30c8b406 295 }
Sigma884 1:6dea30c8b406 296
Sigma884 1:6dea30c8b406 297 if(CanSat_phase <= CANSAT_WAIT){
Sigma884 1:6dea30c8b406 298 pres_0 = pres;
Sigma884 1:6dea30c8b406 299 temp_0 = temp;
Sigma884 1:6dea30c8b406 300 }
Sigma884 1:6dea30c8b406 301
Sigma884 1:6dea30c8b406 302 BNO055.getAMG(amg);
Sigma884 1:6dea30c8b406 303 BNO055.getQuart(quart);
Sigma884 1:6dea30c8b406 304 BNO055.getEulerFromQ(euler);
Sigma884 1:6dea30c8b406 305
Sigma884 1:6dea30c8b406 306 CCS811.getData(&CO2, &TVOCs);
Sigma884 1:6dea30c8b406 307
Sigma884 1:6dea30c8b406 308 bottle_pres_bit = ADS1115.readADC_SingleEnded(0);
Sigma884 1:6dea30c8b406 309 bottle_pres_bit = (float)bottle_pres_bit * 0.125f * 3.0f / 2.0f;
Sigma884 1:6dea30c8b406 310 bottle_pres = (float)bottle_pres_bit/1000.0f / 4.0f - 0.25f;
Sigma884 1:6dea30c8b406 311 }
Sigma884 0:03be138291de 312
Sigma884 0:03be138291de 313
Sigma884 0:03be138291de 314 /*******************************************************************************
Sigma884 0:03be138291de 315 GPS読み取り
Sigma884 0:03be138291de 316 *******************************************************************************/
Sigma884 1:6dea30c8b406 317 void readGPS(){
Sigma884 1:6dea30c8b406 318 gps_yn = GPS.gps_readable;
Sigma884 1:6dea30c8b406 319 if(gps_yn){
Sigma884 1:6dea30c8b406 320 gps_lat = GPS.Latitude();
Sigma884 1:6dea30c8b406 321 gps_lon = GPS.Longitude();
Sigma884 1:6dea30c8b406 322 gps_alt = GPS.Height();
Sigma884 1:6dea30c8b406 323 GPS.getUTC(gps_utc);
Sigma884 1:6dea30c8b406 324 gps_utc[3] += 9;
Sigma884 1:6dea30c8b406 325 if(gps_utc[3] >= 24){
Sigma884 1:6dea30c8b406 326 gps_utc[3] -= 24;
Sigma884 1:6dea30c8b406 327 gps_utc[2] += 1;
Sigma884 1:6dea30c8b406 328 }
Sigma884 1:6dea30c8b406 329 gps_knot = GPS.Knot();
Sigma884 1:6dea30c8b406 330 gps_deg = GPS.Degree();
Sigma884 1:6dea30c8b406 331 gps_sat = GPS.Number();
Sigma884 1:6dea30c8b406 332 }
Sigma884 1:6dea30c8b406 333 }
Sigma884 0:03be138291de 334
Sigma884 0:03be138291de 335
Sigma884 0:03be138291de 336 /*******************************************************************************
Sigma884 0:03be138291de 337 データ表示
Sigma884 0:03be138291de 338 *******************************************************************************/
Sigma884 1:6dea30c8b406 339 void printData(){
Sigma884 1:6dea30c8b406 340
Sigma884 1:6dea30c8b406 341 }
Sigma884 0:03be138291de 342
Sigma884 0:03be138291de 343
Sigma884 0:03be138291de 344 /*******************************************************************************
Sigma884 0:03be138291de 345 PC読み取り
Sigma884 0:03be138291de 346 *******************************************************************************/
Sigma884 1:6dea30c8b406 347 void readPC(){
Sigma884 1:6dea30c8b406 348
Sigma884 1:6dea30c8b406 349 }
Sigma884 0:03be138291de 350
Sigma884 0:03be138291de 351
Sigma884 0:03be138291de 352 /*******************************************************************************
Sigma884 0:03be138291de 353 ヘルプ表示
Sigma884 0:03be138291de 354 *******************************************************************************/
Sigma884 1:6dea30c8b406 355 void printHelp(){
Sigma884 1:6dea30c8b406 356
Sigma884 1:6dea30c8b406 357 }
Sigma884 0:03be138291de 358
Sigma884 0:03be138291de 359
Sigma884 0:03be138291de 360 /*******************************************************************************
Sigma884 0:03be138291de 361 ダウンリンク送信
Sigma884 0:03be138291de 362 無線あり:HEADER_DATA
Sigma884 0:03be138291de 363 *******************************************************************************/
Sigma884 1:6dea30c8b406 364 void sendDownLink(){
Sigma884 1:6dea30c8b406 365
Sigma884 1:6dea30c8b406 366 }
Sigma884 0:03be138291de 367
Sigma884 0:03be138291de 368
Sigma884 0:03be138291de 369 /*******************************************************************************
Sigma884 0:03be138291de 370 アップリンク受信
Sigma884 0:03be138291de 371 無線あり:HEADER_COMMAND
Sigma884 0:03be138291de 372 *******************************************************************************/
Sigma884 1:6dea30c8b406 373 void readUpLink(){
Sigma884 1:6dea30c8b406 374
Sigma884 1:6dea30c8b406 375 }
Sigma884 0:03be138291de 376
Sigma884 0:03be138291de 377
Sigma884 0:03be138291de 378 /*******************************************************************************
Sigma884 0:03be138291de 379 データを1秒ごとに書き込み開始
Sigma884 0:03be138291de 380 *******************************************************************************/
Sigma884 1:6dea30c8b406 381 void startRecSlow(){
Sigma884 1:6dea30c8b406 382
Sigma884 1:6dea30c8b406 383 }
Sigma884 0:03be138291de 384
Sigma884 0:03be138291de 385
Sigma884 0:03be138291de 386 /*******************************************************************************
Sigma884 0:03be138291de 387 データを最速で書き込み開始
Sigma884 0:03be138291de 388 *******************************************************************************/
Sigma884 1:6dea30c8b406 389 void startRecFast(){
Sigma884 1:6dea30c8b406 390
Sigma884 1:6dea30c8b406 391 }
Sigma884 0:03be138291de 392
Sigma884 0:03be138291de 393
Sigma884 0:03be138291de 394 /*******************************************************************************
Sigma884 0:03be138291de 395 データ記録停止
Sigma884 0:03be138291de 396 *******************************************************************************/
Sigma884 1:6dea30c8b406 397 void stopRec(){
Sigma884 1:6dea30c8b406 398
Sigma884 1:6dea30c8b406 399 }
Sigma884 0:03be138291de 400
Sigma884 0:03be138291de 401
Sigma884 0:03be138291de 402 /*******************************************************************************
Sigma884 0:03be138291de 403 データの記録
Sigma884 0:03be138291de 404 *******************************************************************************/
Sigma884 1:6dea30c8b406 405 void recData(){
Sigma884 1:6dea30c8b406 406
Sigma884 1:6dea30c8b406 407 }
Sigma884 0:03be138291de 408
Sigma884 0:03be138291de 409
Sigma884 0:03be138291de 410 /*******************************************************************************
Sigma884 0:03be138291de 411 セットアップ(最初に1回実行)
Sigma884 0:03be138291de 412 無線あり:HEADER_SETUP_SENSOR
Sigma884 0:03be138291de 413 無線あり:HEADER_GPS_SETUP
Sigma884 0:03be138291de 414 *******************************************************************************/
Sigma884 0:03be138291de 415 void setup(){
Sigma884 0:03be138291de 416 wait(1.0f);
Sigma884 0:03be138291de 417 char setup_string[1024];
Sigma884 0:03be138291de 418
Sigma884 0:03be138291de 419 pc.printf("\r\n******************************\r\n");
Sigma884 0:03be138291de 420 pc.printf("Sensor Setting Start!!\r\n");
Sigma884 0:03be138291de 421 strcat(setup_string, "Sensor Setting Start!!\r\n");
Sigma884 0:03be138291de 422 es920 << HEADER_SENSOR_SETUP;
Sigma884 0:03be138291de 423
Sigma884 0:03be138291de 424 //////////////////////////////////////////////////ADXL375
Sigma884 0:03be138291de 425 ADXL375.setDataRate(ADXL375_100HZ);
Sigma884 0:03be138291de 426 if(ADXL375.whoAmI() == 1){
Sigma884 0:03be138291de 427 pc.printf("ADXL375 : OK\r\n");
Sigma884 0:03be138291de 428 strcat(setup_string, "ADXL375 : OK\r\n");
Sigma884 0:03be138291de 429 es920 << (char)0x01;
Sigma884 0:03be138291de 430 }
Sigma884 0:03be138291de 431 else{
Sigma884 0:03be138291de 432 pc.printf("ADXL375 : NG\r\n");
Sigma884 0:03be138291de 433 strcat(setup_string, "ADXL375 : NG\r\n");
Sigma884 0:03be138291de 434 es920 << (char)0x00;
Sigma884 0:03be138291de 435 }
Sigma884 0:03be138291de 436 ADXL375.offset(0.0f, 0.0f, 0.0f);
Sigma884 0:03be138291de 437
Sigma884 0:03be138291de 438 //////////////////////////////////////////////////INA226
Sigma884 0:03be138291de 439 INA226.set_callibretion();
Sigma884 0:03be138291de 440 if(INA226.Connection_check() == 0){
Sigma884 0:03be138291de 441 pc.printf("INA226 : OK\r\n");
Sigma884 0:03be138291de 442 strcat(setup_string, "INA226 : OK!!\r\n");
Sigma884 0:03be138291de 443 es920 << (char)0x01;
Sigma884 0:03be138291de 444 }
Sigma884 0:03be138291de 445 else{
Sigma884 0:03be138291de 446 pc.printf("INA226 : NG\r\n");
Sigma884 0:03be138291de 447 strcat(setup_string, "INA226 : NG\r\n");
Sigma884 0:03be138291de 448 es920 << (char)0x00;
Sigma884 0:03be138291de 449 }
Sigma884 0:03be138291de 450
Sigma884 0:03be138291de 451 //////////////////////////////////////////////////BME280
Sigma884 0:03be138291de 452 BME280.configMeasure(BME280_lib::NORMAL, 1, 2, 1);
Sigma884 0:03be138291de 453 BME280.configFilter(4);
Sigma884 0:03be138291de 454 if(BME280.connectCheck() == 1){
Sigma884 0:03be138291de 455 pc.printf("BME280 OK!!\r\n");
Sigma884 0:03be138291de 456 strcat(setup_string, "BME280 : OK!!\r\n");
Sigma884 0:03be138291de 457 es920 << (char)0x01;
Sigma884 0:03be138291de 458 }
Sigma884 0:03be138291de 459 else{
Sigma884 0:03be138291de 460 pc.printf("BME280 NG\r\n");
Sigma884 0:03be138291de 461 strcat(setup_string, "BME280 : NG\r\n");
Sigma884 0:03be138291de 462 es920 << (char)0x00;
Sigma884 0:03be138291de 463 }
Sigma884 0:03be138291de 464
Sigma884 0:03be138291de 465 //////////////////////////////////////////////////BNO055
Sigma884 0:03be138291de 466 BNO055.setOperationMode(BNO055_lib::CONFIG);
Sigma884 0:03be138291de 467 BNO055.setAccRange(BNO055_lib::_16G);
Sigma884 0:03be138291de 468 BNO055.setAxis(BNO055_lib::Z, BNO055_lib::Y, BNO055_lib::X);
Sigma884 0:03be138291de 469 BNO055.setAxisPM(1, 1, -1);
Sigma884 0:03be138291de 470 if(BNO055.connectCheck() == 1){
Sigma884 0:03be138291de 471 pc.printf("BNO055 OK!!\r\n");
Sigma884 0:03be138291de 472 strcat(setup_string, "BNO055 : OK!!\r\n");
Sigma884 0:03be138291de 473 es920 << (char)0x01;
Sigma884 0:03be138291de 474 }
Sigma884 0:03be138291de 475 else{
Sigma884 0:03be138291de 476 pc.printf("BNO055 NG\r\n");
Sigma884 0:03be138291de 477 strcat(setup_string, "BNO055 : NG\r\n");
Sigma884 0:03be138291de 478 es920 << (char)0x00;
Sigma884 0:03be138291de 479 }
Sigma884 1:6dea30c8b406 480 BNO055.setOperationMode(BNO055_lib::NDOF);
Sigma884 0:03be138291de 481
Sigma884 0:03be138291de 482 //////////////////////////////////////////////////CCS811
Sigma884 0:03be138291de 483 if(CCS811.connectCheck() == 1){
Sigma884 0:03be138291de 484 pc.printf("CCS811 OK!!\r\n");
Sigma884 0:03be138291de 485 strcat(setup_string, "CCS811 : OK!!\r\n");
Sigma884 0:03be138291de 486 es920 << (char)0x01;
Sigma884 0:03be138291de 487 }
Sigma884 0:03be138291de 488 else{
Sigma884 0:03be138291de 489 pc.printf("CCS811 NG\r\n");
Sigma884 0:03be138291de 490 strcat(setup_string, "CCS811 : NG\r\n");
Sigma884 0:03be138291de 491 es920 << (char)0x00;
Sigma884 0:03be138291de 492 }
Sigma884 0:03be138291de 493
Sigma884 0:03be138291de 494 //////////////////////////////////////////////////圧力センサ
Sigma884 0:03be138291de 495 pc.printf("PRES : ");
Sigma884 0:03be138291de 496 ADS1115.setGain(GAIN_TWOTHIRDS);
Sigma884 0:03be138291de 497 pc.printf("OK!!\r\n");
Sigma884 0:03be138291de 498 strcat(setup_string, "PRES : OK!!\r\n");
Sigma884 0:03be138291de 499 es920 << (char)0x01;
Sigma884 0:03be138291de 500
Sigma884 0:03be138291de 501 //////////////////////////////////////////////////SD
Sigma884 0:03be138291de 502 fp = fopen("/sd/Space_SWAN_setup.txt", "r");
Sigma884 0:03be138291de 503 if(fp != NULL){
Sigma884 0:03be138291de 504 pc.printf("SD : OK!!\r\n");
Sigma884 0:03be138291de 505 strcat(setup_string, "SD : OK!!\r\n");
Sigma884 0:03be138291de 506 es920 << (char)0x01;
Sigma884 0:03be138291de 507 fclose(fp);
Sigma884 0:03be138291de 508 }
Sigma884 0:03be138291de 509 else{
Sigma884 0:03be138291de 510 pc.printf("SD : NG...\r\n");
Sigma884 0:03be138291de 511 strcat(setup_string, "SD : NG...\r\n");
Sigma884 0:03be138291de 512 es920 << (char)0x00;
Sigma884 0:03be138291de 513 }
Sigma884 0:03be138291de 514
Sigma884 0:03be138291de 515 pc.printf("Sensor Setting Finished!!\r\n");
Sigma884 0:03be138291de 516 pc.printf("******************************\r\n");
Sigma884 0:03be138291de 517 strcat(setup_string, "Sensor Setting Finished!!\r\n");
Sigma884 0:03be138291de 518 es920.send();
Sigma884 0:03be138291de 519 wait(1.0f);
Sigma884 0:03be138291de 520
Sigma884 0:03be138291de 521 pc.printf("\r\n******************************\r\n");
Sigma884 0:03be138291de 522 if(wait_GPS){
Sigma884 0:03be138291de 523 pc.printf("GPS Setting Start!!\r\n");
Sigma884 0:03be138291de 524 strcat(setup_string, "GPS Setting Start!!\r\n");
Sigma884 0:03be138291de 525
Sigma884 0:03be138291de 526 pc.printf("Waiting : 0");
Sigma884 0:03be138291de 527 strcat(setup_string, "Wait : ");
Sigma884 0:03be138291de 528 int gps_wait_count = 0;
Sigma884 0:03be138291de 529 while(!GPS.gps_readable){
Sigma884 0:03be138291de 530 pc.printf("\rWaiting : %d", gps_wait_count);//
Sigma884 0:03be138291de 531 es920 << HEADER_GPS_SETUP;
Sigma884 0:03be138291de 532 es920 << (char)GPS.gps_readable;
Sigma884 0:03be138291de 533 es920 << (int)gps_wait_count;
Sigma884 0:03be138291de 534 es920.send();
Sigma884 0:03be138291de 535 wait(1.0f);
Sigma884 0:03be138291de 536 gps_wait_count ++;
Sigma884 0:03be138291de 537 }
Sigma884 0:03be138291de 538 char ss[8];
Sigma884 0:03be138291de 539 sprintf(ss, "%d", gps_wait_count);
Sigma884 0:03be138291de 540 strcat(setup_string, ss);
Sigma884 0:03be138291de 541 pc.printf(" OK!!\r\n");
Sigma884 0:03be138291de 542 strcat(setup_string, " OK!!\r\n");
Sigma884 0:03be138291de 543 pc.printf("GPS Setting Finished!!\r\n");
Sigma884 0:03be138291de 544 strcat(setup_string, "GPS Setting Finished!!\r\n");
Sigma884 0:03be138291de 545 es920 << HEADER_GPS_SETUP;
Sigma884 0:03be138291de 546 es920 << (char)0xAA;
Sigma884 0:03be138291de 547 es920 << (int)0;
Sigma884 0:03be138291de 548 es920.send();
Sigma884 0:03be138291de 549 }
Sigma884 0:03be138291de 550 else{
Sigma884 0:03be138291de 551 pc.printf("GPS Setting Ignore...\r\n");
Sigma884 0:03be138291de 552 strcat(setup_string, "GPS Setting Ignore...\r\n");
Sigma884 0:03be138291de 553 es920 << HEADER_GPS_SETUP;
Sigma884 0:03be138291de 554 es920 << (char)0xFF;
Sigma884 0:03be138291de 555 es920 << (int)0;
Sigma884 0:03be138291de 556 es920.send();
Sigma884 0:03be138291de 557 }
Sigma884 0:03be138291de 558 pc.printf("******************************\r\n");
Sigma884 0:03be138291de 559 fp = fopen(file_name, "a");
Sigma884 0:03be138291de 560 fprintf(fp, setup_string);
Sigma884 0:03be138291de 561 fclose(fp);
Sigma884 0:03be138291de 562 setup_string[0] = NULL;
Sigma884 0:03be138291de 563
Sigma884 0:03be138291de 564 printHelp();
Sigma884 0:03be138291de 565 wait(1.0f);
Sigma884 0:03be138291de 566 }