高高度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:
Fri Feb 22 12:21:23 2019 +0000
Revision:
4:b878dce9c247
Parent:
3:4571111a5996
Child:
5:b71a554ab4c4
20190222 ver.0.5

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 3:4571111a5996 49 Nichrome_lib Valve1(p23);
Sigma884 3:4571111a5996 50 Nichrome_lib Valve2(p24);
Sigma884 3:4571111a5996 51 Nichrome_lib Valve3(p24);
Sigma884 3:4571111a5996 52 Nichrome_lib Valve4(p25);
Sigma884 3:4571111a5996 53 Nichrome_lib 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 3:4571111a5996 66 Ticker tick_save;
Sigma884 0:03be138291de 67 Ticker tick_header_data;
Sigma884 0:03be138291de 68
Sigma884 0:03be138291de 69
Sigma884 0:03be138291de 70 /*******************************************************************************
Sigma884 0:03be138291de 71 関数のプロトタイプ宣言
Sigma884 0:03be138291de 72 *******************************************************************************/
Sigma884 0:03be138291de 73 void setup(); //無線あり
Sigma884 0:03be138291de 74
Sigma884 0:03be138291de 75 void modeChange(); //無線あり
Sigma884 0:03be138291de 76
Sigma884 2:a443df6115bc 77 void controllAttitude();
Sigma884 2:a443df6115bc 78
Sigma884 0:03be138291de 79 void readSensor();
Sigma884 0:03be138291de 80 void readGPS();
Sigma884 0:03be138291de 81
Sigma884 0:03be138291de 82 void printData();
Sigma884 0:03be138291de 83 void readPC();
Sigma884 0:03be138291de 84 void printHelp();
Sigma884 0:03be138291de 85
Sigma884 0:03be138291de 86 void sendDownLink();//無線あり
Sigma884 0:03be138291de 87 void readUpLink(); //無線あり
Sigma884 0:03be138291de 88
Sigma884 0:03be138291de 89 void startRecSlow();
Sigma884 0:03be138291de 90 void startRecFast();
Sigma884 0:03be138291de 91 void stopRec();
Sigma884 0:03be138291de 92 void recData();
Sigma884 0:03be138291de 93
Sigma884 2:a443df6115bc 94 void buzzerChange();
Sigma884 2:a443df6115bc 95
Sigma884 0:03be138291de 96
Sigma884 0:03be138291de 97 /*******************************************************************************
Sigma884 0:03be138291de 98 変数の宣言
Sigma884 0:03be138291de 99 *******************************************************************************/
Sigma884 0:03be138291de 100 char CanSat_phase;
Sigma884 0:03be138291de 101 bool do_first = false;
Sigma884 2:a443df6115bc 102 bool controll_yn = false;
Sigma884 2:a443df6115bc 103
Sigma884 0:03be138291de 104 bool es920_using = false;
Sigma884 0:03be138291de 105 char es920_uplink_command = '-';
Sigma884 0:03be138291de 106
Sigma884 0:03be138291de 107 float adxl_acc[3];
Sigma884 0:03be138291de 108
Sigma884 0:03be138291de 109 float ina_v, ina_i;
Sigma884 0:03be138291de 110
Sigma884 0:03be138291de 111 double amg[9], quart[4], euler[3];
Sigma884 0:03be138291de 112
Sigma884 0:03be138291de 113 float pres, temp, hum, alt, pres_0, temp_0;
Sigma884 0:03be138291de 114 float pres_now;
Sigma884 0:03be138291de 115 int speed_time_old;
Sigma884 0:03be138291de 116 float alt_buf[10], alt_ave, alt_ave_old, speed, speed_buf[10], speed_ave;
Sigma884 0:03be138291de 117 int alt_count = 0, speed_count = 0;
Sigma884 0:03be138291de 118
Sigma884 1:6dea30c8b406 119 int CO2, TVOCs;
Sigma884 1:6dea30c8b406 120
Sigma884 1:6dea30c8b406 121 int16_t bottle_pres_bit;
Sigma884 1:6dea30c8b406 122 float bottle_pres;
Sigma884 1:6dea30c8b406 123
Sigma884 0:03be138291de 124 float gps_lat, gps_lon, gps_alt, gps_utc[6], gps_knot, gps_deg;
Sigma884 0:03be138291de 125 int gps_sat;
Sigma884 0:03be138291de 126 bool gps_yn;
Sigma884 0:03be138291de 127
Sigma884 0:03be138291de 128 bool flight_pin;
Sigma884 0:03be138291de 129
Sigma884 0:03be138291de 130 FILE *fp;
Sigma884 0:03be138291de 131 bool save_slow = false;
Sigma884 0:03be138291de 132 bool save_fast = false;
Sigma884 0:03be138291de 133 int save_c = 0;
Sigma884 0:03be138291de 134
Sigma884 4:b878dce9c247 135 int eeprom_ptr;
Sigma884 4:b878dce9c247 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 modeChange(); //状態遷移の判断
Sigma884 2:a443df6115bc 223 controllAttitude();
Sigma884 3:4571111a5996 224 if(save_fast){
Sigma884 3:4571111a5996 225 recData();
Sigma884 3:4571111a5996 226 }
Sigma884 0:03be138291de 227 }
Sigma884 0:03be138291de 228 }
Sigma884 0:03be138291de 229
Sigma884 0:03be138291de 230
Sigma884 0:03be138291de 231 /*******************************************************************************
Sigma884 0:03be138291de 232 状態遷移の判断
Sigma884 0:03be138291de 233 無線あり:HEADER_START
Sigma884 0:03be138291de 234 *******************************************************************************/
Sigma884 1:6dea30c8b406 235 void modeChange(){
Sigma884 2:a443df6115bc 236 switch(CanSat_phase){
Sigma884 2:a443df6115bc 237 case CANSAT_SAFETY:
Sigma884 2:a443df6115bc 238 if(!do_first){
Sigma884 2:a443df6115bc 239
Sigma884 2:a443df6115bc 240 }
Sigma884 2:a443df6115bc 241 break;
Sigma884 2:a443df6115bc 242
Sigma884 2:a443df6115bc 243 case CANSAT_WAIT:
Sigma884 2:a443df6115bc 244 if(!do_first){
Sigma884 2:a443df6115bc 245
Sigma884 2:a443df6115bc 246 }
Sigma884 2:a443df6115bc 247 break;
Sigma884 2:a443df6115bc 248
Sigma884 2:a443df6115bc 249 case CANSAT_FLIGHT:
Sigma884 2:a443df6115bc 250 if(!do_first){
Sigma884 2:a443df6115bc 251
Sigma884 2:a443df6115bc 252 }
Sigma884 2:a443df6115bc 253 break;
Sigma884 2:a443df6115bc 254
Sigma884 2:a443df6115bc 255 case CANSAT_RECOVERY:
Sigma884 2:a443df6115bc 256 if(!do_first){
Sigma884 2:a443df6115bc 257
Sigma884 2:a443df6115bc 258 }
Sigma884 2:a443df6115bc 259 break;
Sigma884 2:a443df6115bc 260 }
Sigma884 2:a443df6115bc 261 }
Sigma884 2:a443df6115bc 262
Sigma884 2:a443df6115bc 263 /*******************************************************************************
Sigma884 2:a443df6115bc 264 姿勢制御
Sigma884 2:a443df6115bc 265 *******************************************************************************/
Sigma884 2:a443df6115bc 266 void controllAttitude(){
Sigma884 1:6dea30c8b406 267
Sigma884 1:6dea30c8b406 268 }
Sigma884 0:03be138291de 269
Sigma884 0:03be138291de 270
Sigma884 0:03be138291de 271 /*******************************************************************************
Sigma884 0:03be138291de 272 センサー読み取り
Sigma884 0:03be138291de 273 *******************************************************************************/
Sigma884 1:6dea30c8b406 274 void readSensor(){
Sigma884 1:6dea30c8b406 275 time_read = time_main.read_ms();
Sigma884 1:6dea30c8b406 276 time_min = time_reset * 30 + floor((double)time_read / (60 * 1000));
Sigma884 1:6dea30c8b406 277 time_sec = time_read % (60 * 1000);
Sigma884 1:6dea30c8b406 278 time_sec = floor((double)time_sec / 1000);
Sigma884 1:6dea30c8b406 279 time_ms = time_read % 1000;
Sigma884 1:6dea30c8b406 280 if(time_read >= 30*60*1000){
Sigma884 1:6dea30c8b406 281 time_main.reset();
Sigma884 1:6dea30c8b406 282 time_reset ++;
Sigma884 1:6dea30c8b406 283 }
Sigma884 1:6dea30c8b406 284
Sigma884 1:6dea30c8b406 285 if(CanSat_phase >= CANSAT_FLIGHT){
Sigma884 1:6dea30c8b406 286 flight_time_read_old = flight_time_read;
Sigma884 1:6dea30c8b406 287 flight_time_read = time_flight.read_ms();
Sigma884 1:6dea30c8b406 288 }
Sigma884 1:6dea30c8b406 289 else{
Sigma884 1:6dea30c8b406 290 flight_time_read = 0;
Sigma884 1:6dea30c8b406 291 }
Sigma884 1:6dea30c8b406 292 flight_time_min = flight_time_reset * 30 + floor((double)flight_time_read / (60 * 1000));
Sigma884 1:6dea30c8b406 293 flight_time_sec = flight_time_read % (60 * 1000);
Sigma884 1:6dea30c8b406 294 flight_time_sec = floor((double)flight_time_sec / 1000);
Sigma884 1:6dea30c8b406 295 flight_time_ms = flight_time_read % 1000;
Sigma884 1:6dea30c8b406 296 if(time_read >= 30*60*1000){
Sigma884 1:6dea30c8b406 297 time_flight.reset();
Sigma884 1:6dea30c8b406 298 flight_time_reset ++;
Sigma884 1:6dea30c8b406 299 }
Sigma884 1:6dea30c8b406 300
Sigma884 1:6dea30c8b406 301 ADXL375.getOutput(adxl_acc);
Sigma884 1:6dea30c8b406 302
Sigma884 1:6dea30c8b406 303 INA226.get_Voltage_current(&ina_v, &ina_i);
Sigma884 1:6dea30c8b406 304 ina_v = ina_v / 1000;
Sigma884 1:6dea30c8b406 305 ina_i = ina_i / 1000;
Sigma884 1:6dea30c8b406 306 if(ina_i > 64){
Sigma884 1:6dea30c8b406 307 ina_i = 0.0f;
Sigma884 1:6dea30c8b406 308 }
Sigma884 1:6dea30c8b406 309
Sigma884 1:6dea30c8b406 310 BME280.getData(&temp, &pres_now, &hum);
Sigma884 1:6dea30c8b406 311 if(pres_now != pres){
Sigma884 1:6dea30c8b406 312 pres = pres_now;
Sigma884 1:6dea30c8b406 313 alt = BME280.getAlt2(pres_0, temp_0);
Sigma884 1:6dea30c8b406 314
Sigma884 1:6dea30c8b406 315 alt_buf[alt_count] = alt;
Sigma884 1:6dea30c8b406 316 alt_count ++;
Sigma884 1:6dea30c8b406 317 if(alt_count > 10){
Sigma884 1:6dea30c8b406 318 alt_count = 0;
Sigma884 1:6dea30c8b406 319 }
Sigma884 1:6dea30c8b406 320 float alt_sum = 0;
Sigma884 1:6dea30c8b406 321 for(int i = 0; i < 10; i ++){
Sigma884 1:6dea30c8b406 322 alt_sum += alt_buf[i];
Sigma884 1:6dea30c8b406 323 }
Sigma884 1:6dea30c8b406 324 alt_ave_old = alt_ave;
Sigma884 1:6dea30c8b406 325 alt_ave = alt_sum / 10;
Sigma884 1:6dea30c8b406 326
Sigma884 1:6dea30c8b406 327 if(fabs(alt_ave - alt_ave_old) > 0.01){
Sigma884 1:6dea30c8b406 328 speed = (alt_ave - alt_ave_old) / (((float)flight_time_read - (float)speed_time_old) / 1000);
Sigma884 1:6dea30c8b406 329 }
Sigma884 1:6dea30c8b406 330 if(CanSat_phase <= CANSAT_WAIT){
Sigma884 1:6dea30c8b406 331 speed = 0.0f;
Sigma884 1:6dea30c8b406 332 }
Sigma884 1:6dea30c8b406 333
Sigma884 1:6dea30c8b406 334 speed_buf[speed_count] = speed;
Sigma884 1:6dea30c8b406 335 speed_count ++;
Sigma884 1:6dea30c8b406 336 if(speed_count > 10){
Sigma884 1:6dea30c8b406 337 speed_count = 0;
Sigma884 1:6dea30c8b406 338 }
Sigma884 1:6dea30c8b406 339 float speed_sum = 0;
Sigma884 1:6dea30c8b406 340 for(int i = 0; i < 10; i ++){
Sigma884 1:6dea30c8b406 341 speed_sum = speed_buf[i];
Sigma884 1:6dea30c8b406 342 }
Sigma884 1:6dea30c8b406 343 speed_ave = speed_sum / 10;
Sigma884 1:6dea30c8b406 344
Sigma884 1:6dea30c8b406 345 speed_time_old = flight_time_read;
Sigma884 1:6dea30c8b406 346 }
Sigma884 1:6dea30c8b406 347
Sigma884 1:6dea30c8b406 348 if(CanSat_phase <= CANSAT_WAIT){
Sigma884 1:6dea30c8b406 349 pres_0 = pres;
Sigma884 1:6dea30c8b406 350 temp_0 = temp;
Sigma884 1:6dea30c8b406 351 }
Sigma884 1:6dea30c8b406 352
Sigma884 1:6dea30c8b406 353 BNO055.getAMG(amg);
Sigma884 1:6dea30c8b406 354 BNO055.getQuart(quart);
Sigma884 1:6dea30c8b406 355 BNO055.getEulerFromQ(euler);
Sigma884 1:6dea30c8b406 356
Sigma884 1:6dea30c8b406 357 CCS811.getData(&CO2, &TVOCs);
Sigma884 1:6dea30c8b406 358
Sigma884 1:6dea30c8b406 359 bottle_pres_bit = ADS1115.readADC_SingleEnded(0);
Sigma884 1:6dea30c8b406 360 bottle_pres_bit = (float)bottle_pres_bit * 0.125f * 3.0f / 2.0f;
Sigma884 1:6dea30c8b406 361 bottle_pres = (float)bottle_pres_bit/1000.0f / 4.0f - 0.25f;
Sigma884 2:a443df6115bc 362
Sigma884 2:a443df6115bc 363 flight_pin = FlightPin;
Sigma884 1:6dea30c8b406 364 }
Sigma884 0:03be138291de 365
Sigma884 0:03be138291de 366
Sigma884 0:03be138291de 367 /*******************************************************************************
Sigma884 0:03be138291de 368 GPS読み取り
Sigma884 0:03be138291de 369 *******************************************************************************/
Sigma884 1:6dea30c8b406 370 void readGPS(){
Sigma884 1:6dea30c8b406 371 gps_yn = GPS.gps_readable;
Sigma884 1:6dea30c8b406 372 if(gps_yn){
Sigma884 1:6dea30c8b406 373 gps_lat = GPS.Latitude();
Sigma884 1:6dea30c8b406 374 gps_lon = GPS.Longitude();
Sigma884 1:6dea30c8b406 375 gps_alt = GPS.Height();
Sigma884 1:6dea30c8b406 376 GPS.getUTC(gps_utc);
Sigma884 1:6dea30c8b406 377 gps_utc[3] += 9;
Sigma884 1:6dea30c8b406 378 if(gps_utc[3] >= 24){
Sigma884 1:6dea30c8b406 379 gps_utc[3] -= 24;
Sigma884 1:6dea30c8b406 380 gps_utc[2] += 1;
Sigma884 1:6dea30c8b406 381 }
Sigma884 1:6dea30c8b406 382 gps_knot = GPS.Knot();
Sigma884 1:6dea30c8b406 383 gps_deg = GPS.Degree();
Sigma884 1:6dea30c8b406 384 gps_sat = GPS.Number();
Sigma884 1:6dea30c8b406 385 }
Sigma884 1:6dea30c8b406 386 }
Sigma884 0:03be138291de 387
Sigma884 0:03be138291de 388
Sigma884 0:03be138291de 389 /*******************************************************************************
Sigma884 0:03be138291de 390 データ表示
Sigma884 0:03be138291de 391 *******************************************************************************/
Sigma884 1:6dea30c8b406 392 void printData(){
Sigma884 2:a443df6115bc 393 if(ok_PC){
Sigma884 2:a443df6115bc 394 pc.printf("Time : %d:%02d\r\n", time_min, time_sec);
Sigma884 2:a443df6115bc 395 pc.printf("FlightTime : %d:%02d\r\n", flight_time_min, flight_time_sec);
Sigma884 2:a443df6115bc 396
Sigma884 2:a443df6115bc 397 pc.printf("Phase : ");
Sigma884 2:a443df6115bc 398 switch(CanSat_phase){
Sigma884 2:a443df6115bc 399 case CANSAT_SETUP:
Sigma884 2:a443df6115bc 400 pc.printf("SETUP\r\n");
Sigma884 2:a443df6115bc 401 break;
Sigma884 2:a443df6115bc 402 case CANSAT_SAFETY:
Sigma884 2:a443df6115bc 403 pc.printf("SAFETY\r\n");
Sigma884 2:a443df6115bc 404 break;
Sigma884 2:a443df6115bc 405 case CANSAT_WAIT:
Sigma884 2:a443df6115bc 406 pc.printf("WAIT\r\n");
Sigma884 2:a443df6115bc 407 break;
Sigma884 2:a443df6115bc 408 case CANSAT_FLIGHT:
Sigma884 2:a443df6115bc 409 pc.printf("FLIGHT\r\n");
Sigma884 2:a443df6115bc 410 break;
Sigma884 2:a443df6115bc 411 case CANSAT_RECOVERY:
Sigma884 2:a443df6115bc 412 pc.printf("RECOVERY\r\n");
Sigma884 2:a443df6115bc 413 break;
Sigma884 2:a443df6115bc 414 }
Sigma884 2:a443df6115bc 415
Sigma884 2:a443df6115bc 416 pc.printf("SAVE : ");
Sigma884 2:a443df6115bc 417 if(save_slow){
Sigma884 2:a443df6115bc 418 pc.printf("SLOW\r\n");
Sigma884 2:a443df6115bc 419 }
Sigma884 2:a443df6115bc 420 else if(save_fast){
Sigma884 2:a443df6115bc 421 pc.printf("FAST\r\n");
Sigma884 2:a443df6115bc 422 }
Sigma884 2:a443df6115bc 423 else{
Sigma884 2:a443df6115bc 424 pc.printf("STOP\r\n");
Sigma884 2:a443df6115bc 425 }
Sigma884 2:a443df6115bc 426
Sigma884 2:a443df6115bc 427 pc.printf("Controll : %d\r\n", controll_yn);
Sigma884 2:a443df6115bc 428
Sigma884 2:a443df6115bc 429 pc.printf("Flight Pin : %d\r\n", flight_pin);
Sigma884 3:4571111a5996 430 pc.printf("Valve: %d, %d, %d, %d\r\n", Valve1.status, Valve2.status, Valve3.status, Valve4.status);
Sigma884 3:4571111a5996 431 pc.printf("Buzzer : %d\r\n", Buzzer.status);
Sigma884 2:a443df6115bc 432
Sigma884 2:a443df6115bc 433 pc.printf("GPS : %3.7f, %3.7f, %.2f\r\n", gps_lat, gps_lon, gps_alt);
Sigma884 2:a443df6115bc 434 pc.printf("Move : %.2f[knot], %.2f[deg]\r\n", gps_knot, gps_deg);
Sigma884 2:a443df6115bc 435 pc.printf("Sats : %d\r\n", gps_sat);
Sigma884 2:a443df6115bc 436
Sigma884 2:a443df6115bc 437 pc.printf("INA226 : %.2f[V], %.2f[A]\r\n", ina_v, ina_i);
Sigma884 2:a443df6115bc 438 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 439 pc.printf("BNO055 : %f, %f, %f\r\n", euler[0], euler[1], euler[2]);
Sigma884 2:a443df6115bc 440 pc.printf("CCS811 : %d[ppm], %d[ppm]\r\n", CO2, TVOCs);
Sigma884 2:a443df6115bc 441 pc.printf("Bottle : %f[MPa]\r\n", bottle_pres);
Sigma884 2:a443df6115bc 442
Sigma884 2:a443df6115bc 443 pc.printf("\n\n\n");
Sigma884 2:a443df6115bc 444 }
Sigma884 1:6dea30c8b406 445 }
Sigma884 0:03be138291de 446
Sigma884 0:03be138291de 447
Sigma884 0:03be138291de 448 /*******************************************************************************
Sigma884 0:03be138291de 449 PC読み取り
Sigma884 0:03be138291de 450 *******************************************************************************/
Sigma884 1:6dea30c8b406 451 void readPC(){
Sigma884 2:a443df6115bc 452 if(ok_PC){
Sigma884 2:a443df6115bc 453 char command = pc.getc();
Sigma884 2:a443df6115bc 454 pc.printf("PC Command : %c\r\n", command);
Sigma884 2:a443df6115bc 455
Sigma884 2:a443df6115bc 456 switch(command){
Sigma884 2:a443df6115bc 457 case '?': //ヘルプ表示
Sigma884 2:a443df6115bc 458 printHelp();
Sigma884 2:a443df6115bc 459 break;
Sigma884 2:a443df6115bc 460
Sigma884 2:a443df6115bc 461 case 'W': //投下待機モードへ移行
Sigma884 2:a443df6115bc 462 if(CanSat_phase == CANSAT_SAFETY){
Sigma884 2:a443df6115bc 463 CanSat_phase = CANSAT_WAIT;
Sigma884 2:a443df6115bc 464 do_first = false;
Sigma884 2:a443df6115bc 465 }
Sigma884 2:a443df6115bc 466 break;
Sigma884 2:a443df6115bc 467
Sigma884 2:a443df6115bc 468 case 'S': //安全モードへ移行
Sigma884 2:a443df6115bc 469 if(CanSat_phase == CANSAT_WAIT || CanSat_phase == CANSAT_FLIGHT){
Sigma884 2:a443df6115bc 470 CanSat_phase = CANSAT_SAFETY;
Sigma884 2:a443df6115bc 471 do_first = false;
Sigma884 2:a443df6115bc 472 }
Sigma884 2:a443df6115bc 473 break;
Sigma884 2:a443df6115bc 474
Sigma884 2:a443df6115bc 475 case 'F': //フライトモードへ移行
Sigma884 2:a443df6115bc 476 if(CanSat_phase == CANSAT_WAIT){
Sigma884 2:a443df6115bc 477 CanSat_phase = CANSAT_FLIGHT;
Sigma884 2:a443df6115bc 478 do_first = false;
Sigma884 2:a443df6115bc 479 }
Sigma884 2:a443df6115bc 480 break;
Sigma884 2:a443df6115bc 481
Sigma884 2:a443df6115bc 482 case 'C': //記録停止
Sigma884 2:a443df6115bc 483 if((CanSat_phase == CANSAT_RECOVERY || CanSat_phase == CANSAT_SAFETY) && (save_slow || save_fast)){
Sigma884 2:a443df6115bc 484 stopRec();
Sigma884 2:a443df6115bc 485 }
Sigma884 2:a443df6115bc 486 break;
Sigma884 2:a443df6115bc 487
Sigma884 2:a443df6115bc 488 case 'o': //低速記録開始
Sigma884 2:a443df6115bc 489 if(CanSat_phase == CANSAT_RECOVERY || CanSat_phase == CANSAT_SAFETY && (!save_slow && !save_fast)){
Sigma884 2:a443df6115bc 490 startRecSlow();
Sigma884 2:a443df6115bc 491 }
Sigma884 2:a443df6115bc 492 break;
Sigma884 2:a443df6115bc 493
Sigma884 2:a443df6115bc 494 case 'O': //高速記録開始
Sigma884 2:a443df6115bc 495 if(CanSat_phase == CANSAT_RECOVERY || CanSat_phase == CANSAT_SAFETY && (!save_slow && !save_fast)){
Sigma884 2:a443df6115bc 496 startRecFast();
Sigma884 2:a443df6115bc 497 }
Sigma884 2:a443df6115bc 498 break;
Sigma884 2:a443df6115bc 499
Sigma884 2:a443df6115bc 500 case 'B': //ブザー切り替え
Sigma884 2:a443df6115bc 501 buzzerChange();
Sigma884 2:a443df6115bc 502 break;
Sigma884 2:a443df6115bc 503
Sigma884 2:a443df6115bc 504 case '1': //姿勢制御再開
Sigma884 2:a443df6115bc 505 if(CanSat_phase == CANSAT_FLIGHT && !controll_yn){
Sigma884 2:a443df6115bc 506 controll_yn = true;
Sigma884 2:a443df6115bc 507 }
Sigma884 2:a443df6115bc 508 break;
Sigma884 2:a443df6115bc 509
Sigma884 2:a443df6115bc 510 case '0': //姿勢制御停止
Sigma884 2:a443df6115bc 511 if(CanSat_phase == CANSAT_FLIGHT && controll_yn){
Sigma884 2:a443df6115bc 512 controll_yn = false;
Sigma884 2:a443df6115bc 513 }
Sigma884 2:a443df6115bc 514 break;
Sigma884 2:a443df6115bc 515 }
Sigma884 2:a443df6115bc 516 }
Sigma884 1:6dea30c8b406 517 }
Sigma884 0:03be138291de 518
Sigma884 0:03be138291de 519
Sigma884 0:03be138291de 520 /*******************************************************************************
Sigma884 0:03be138291de 521 ヘルプ表示
Sigma884 0:03be138291de 522 *******************************************************************************/
Sigma884 1:6dea30c8b406 523 void printHelp(){
Sigma884 2:a443df6115bc 524 pc.printf("\r\n********************\r\n");
Sigma884 2:a443df6115bc 525 pc.printf("Commands\r\n");
Sigma884 1:6dea30c8b406 526
Sigma884 2:a443df6115bc 527 pc.printf("W : Safety -> Wait\r\n");
Sigma884 2:a443df6115bc 528 pc.printf("S : Wait -> Safety\r\n");
Sigma884 2:a443df6115bc 529 pc.printf("F : Wait -> Flight\r\n");
Sigma884 2:a443df6115bc 530 pc.printf("C : Stop Recording\r\n");
Sigma884 2:a443df6115bc 531 pc.printf("o(small o) : Start Recording (Slow)\r\n");
Sigma884 2:a443df6115bc 532 pc.printf("O(large o) : Start Recording (Fast)\r\n");
Sigma884 2:a443df6115bc 533 pc.printf("B : Buzzer Change\r\n");
Sigma884 2:a443df6115bc 534 pc.printf("1(one) : Restart Controll Attitude\r\n");
Sigma884 2:a443df6115bc 535 pc.printf("0(zero) : Stop Controll Attitude\r\n");
Sigma884 2:a443df6115bc 536
Sigma884 2:a443df6115bc 537 pc.printf("********************\r\n\n");
Sigma884 2:a443df6115bc 538 wait(1.0f);
Sigma884 1:6dea30c8b406 539 }
Sigma884 0:03be138291de 540
Sigma884 0:03be138291de 541
Sigma884 0:03be138291de 542 /*******************************************************************************
Sigma884 0:03be138291de 543 ダウンリンク送信
Sigma884 0:03be138291de 544 無線あり:HEADER_DATA
Sigma884 0:03be138291de 545 *******************************************************************************/
Sigma884 1:6dea30c8b406 546 void sendDownLink(){
Sigma884 2:a443df6115bc 547 if(!es920_using){
Sigma884 2:a443df6115bc 548 es920 << HEADER_DATA;
Sigma884 2:a443df6115bc 549
Sigma884 4:b878dce9c247 550 es920 << (unsigned short)time_reset;
Sigma884 4:b878dce9c247 551 es920 << (unsigned short)(time_read / 1000);
Sigma884 2:a443df6115bc 552
Sigma884 4:b878dce9c247 553 es920 << (unsigned short)flight_time_reset;
Sigma884 4:b878dce9c247 554 es920 << (unsigned short)(flight_time_read / 1000);
Sigma884 2:a443df6115bc 555
Sigma884 2:a443df6115bc 556 es920 << CanSat_phase;
Sigma884 2:a443df6115bc 557
Sigma884 2:a443df6115bc 558 char status = 0x00;
Sigma884 2:a443df6115bc 559 if(save_slow) status |= (char)0x01;
Sigma884 2:a443df6115bc 560 if(save_fast) status |= (char)0x02;
Sigma884 2:a443df6115bc 561 if(controll_yn) status |= (char)0x04;
Sigma884 2:a443df6115bc 562 if(flight_pin) status |= (char)0x08;
Sigma884 3:4571111a5996 563 if(Buzzer.status) status |= (char)0x10;
Sigma884 2:a443df6115bc 564 es920 << status;
Sigma884 2:a443df6115bc 565
Sigma884 3:4571111a5996 566 if(Valve1.status) status |= (char)0x01;
Sigma884 3:4571111a5996 567 if(Valve2.status) status |= (char)0x02;
Sigma884 3:4571111a5996 568 if(Valve3.status) status |= (char)0x04;
Sigma884 3:4571111a5996 569 if(Valve4.status) status |= (char)0x08;
Sigma884 2:a443df6115bc 570 es920 << status;
Sigma884 2:a443df6115bc 571
Sigma884 2:a443df6115bc 572 es920 << (float)gps_lat;
Sigma884 2:a443df6115bc 573 es920 << (float)gps_lon;
Sigma884 2:a443df6115bc 574 es920 << (unsigned short)(gps_alt / ES920_MAX_1500);
Sigma884 2:a443df6115bc 575 es920 << (unsigned short)(gps_knot / ES920_MAX_200);
Sigma884 2:a443df6115bc 576 es920 << (unsigned short)(gps_deg / ES920_MAX_500);
Sigma884 4:b878dce9c247 577 es920 << (unsigned short)gps_sat;
Sigma884 2:a443df6115bc 578
Sigma884 2:a443df6115bc 579 es920 << (unsigned short)(ina_v / ES920_MAX_20);
Sigma884 2:a443df6115bc 580 es920 << (unsigned short)(ina_i / ES920_MAX_20);
Sigma884 2:a443df6115bc 581
Sigma884 2:a443df6115bc 582 es920 << (unsigned short)(pres / ES920_MAX_1500);
Sigma884 2:a443df6115bc 583 es920 << (unsigned short)(temp / ES920_MAX_100);
Sigma884 4:b878dce9c247 584 es920 << (short)(alt / ES920_MAX_500);
Sigma884 4:b878dce9c247 585 es920 << (short)(speed / ES920_MAX_50);
Sigma884 2:a443df6115bc 586
Sigma884 2:a443df6115bc 587 es920 << (short)(euler[0] / ES920_MAX_5);
Sigma884 2:a443df6115bc 588 es920 << (short)(euler[1] / ES920_MAX_5);
Sigma884 2:a443df6115bc 589 es920 << (short)(euler[2] / ES920_MAX_5);
Sigma884 2:a443df6115bc 590
Sigma884 2:a443df6115bc 591 es920 << (unsigned short)CO2;
Sigma884 2:a443df6115bc 592 es920 << (unsigned short)TVOCs;
Sigma884 2:a443df6115bc 593
Sigma884 2:a443df6115bc 594 es920 << (unsigned short)(bottle_pres / ES920_MAX_2);
Sigma884 2:a443df6115bc 595
Sigma884 2:a443df6115bc 596 es920.send();
Sigma884 2:a443df6115bc 597 }
Sigma884 1:6dea30c8b406 598 }
Sigma884 0:03be138291de 599
Sigma884 0:03be138291de 600
Sigma884 0:03be138291de 601 /*******************************************************************************
Sigma884 3:4571111a5996 602 アップリンク解析
Sigma884 3:4571111a5996 603 無線あり:HEADER_COMMAND(受信)
Sigma884 0:03be138291de 604 *******************************************************************************/
Sigma884 1:6dea30c8b406 605 void readUpLink(){
Sigma884 3:4571111a5996 606 es920_uplink_command = es920.data[0];
Sigma884 3:4571111a5996 607 pc.printf("GND Command = %c\r\n", es920_uplink_command);
Sigma884 1:6dea30c8b406 608
Sigma884 3:4571111a5996 609 switch(es920_uplink_command){
Sigma884 3:4571111a5996 610 case 'W': //投下待機モードへ移行
Sigma884 3:4571111a5996 611 if(CanSat_phase == CANSAT_SAFETY){
Sigma884 3:4571111a5996 612 CanSat_phase = CANSAT_WAIT;
Sigma884 3:4571111a5996 613 do_first = false;
Sigma884 3:4571111a5996 614 }
Sigma884 3:4571111a5996 615 break;
Sigma884 3:4571111a5996 616
Sigma884 3:4571111a5996 617 case 'S': //安全モードへ移行
Sigma884 3:4571111a5996 618 if(CanSat_phase == CANSAT_WAIT || CanSat_phase == CANSAT_FLIGHT){
Sigma884 3:4571111a5996 619 CanSat_phase = CANSAT_SAFETY;
Sigma884 3:4571111a5996 620 do_first = false;
Sigma884 3:4571111a5996 621 }
Sigma884 3:4571111a5996 622 break;
Sigma884 3:4571111a5996 623
Sigma884 3:4571111a5996 624 case 'F': //フライトモードへ移行
Sigma884 3:4571111a5996 625 if(CanSat_phase == CANSAT_WAIT){
Sigma884 3:4571111a5996 626 CanSat_phase = CANSAT_FLIGHT;
Sigma884 3:4571111a5996 627 do_first = false;
Sigma884 3:4571111a5996 628 }
Sigma884 3:4571111a5996 629 break;
Sigma884 3:4571111a5996 630
Sigma884 3:4571111a5996 631 case 'C': //記録停止
Sigma884 3:4571111a5996 632 if((CanSat_phase == CANSAT_RECOVERY || CanSat_phase == CANSAT_SAFETY) && (save_slow || save_fast)){
Sigma884 3:4571111a5996 633 stopRec();
Sigma884 3:4571111a5996 634 }
Sigma884 3:4571111a5996 635 break;
Sigma884 3:4571111a5996 636
Sigma884 3:4571111a5996 637 case 'o': //低速記録開始
Sigma884 3:4571111a5996 638 if(CanSat_phase == CANSAT_RECOVERY || CanSat_phase == CANSAT_SAFETY && (!save_slow && !save_fast)){
Sigma884 3:4571111a5996 639 startRecSlow();
Sigma884 3:4571111a5996 640 }
Sigma884 3:4571111a5996 641 break;
Sigma884 3:4571111a5996 642
Sigma884 3:4571111a5996 643 case 'O': //高速記録開始
Sigma884 3:4571111a5996 644 if(CanSat_phase == CANSAT_RECOVERY || CanSat_phase == CANSAT_SAFETY && (!save_slow && !save_fast)){
Sigma884 3:4571111a5996 645 startRecFast();
Sigma884 3:4571111a5996 646 }
Sigma884 3:4571111a5996 647 break;
Sigma884 3:4571111a5996 648
Sigma884 3:4571111a5996 649 case 'B': //ブザー切り替え
Sigma884 3:4571111a5996 650 buzzerChange();
Sigma884 3:4571111a5996 651 break;
Sigma884 3:4571111a5996 652
Sigma884 3:4571111a5996 653 case '1': //姿勢制御再開
Sigma884 3:4571111a5996 654 if(CanSat_phase == CANSAT_FLIGHT && !controll_yn){
Sigma884 3:4571111a5996 655 controll_yn = true;
Sigma884 3:4571111a5996 656 }
Sigma884 3:4571111a5996 657 break;
Sigma884 3:4571111a5996 658
Sigma884 3:4571111a5996 659 case '0': //姿勢制御停止
Sigma884 3:4571111a5996 660 if(CanSat_phase == CANSAT_FLIGHT && controll_yn){
Sigma884 3:4571111a5996 661 controll_yn = false;
Sigma884 3:4571111a5996 662 }
Sigma884 3:4571111a5996 663 break;
Sigma884 3:4571111a5996 664 }
Sigma884 1:6dea30c8b406 665 }
Sigma884 0:03be138291de 666
Sigma884 0:03be138291de 667
Sigma884 0:03be138291de 668 /*******************************************************************************
Sigma884 0:03be138291de 669 データを1秒ごとに書き込み開始
Sigma884 0:03be138291de 670 *******************************************************************************/
Sigma884 1:6dea30c8b406 671 void startRecSlow(){
Sigma884 3:4571111a5996 672 if(!save_slow && !save_fast){
Sigma884 3:4571111a5996 673 fp = fopen(file_name, "a");
Sigma884 3:4571111a5996 674 fprintf(fp, "Time,Flight Time,Phase,Controll,Flight Pin,");
Sigma884 3:4571111a5996 675 fprintf(fp, "Valve1,Valve2,Valve3,Valve4,Buzzer,");
Sigma884 3:4571111a5996 676 fprintf(fp, "GPS Y/N,GPS Time,Latitude,Longitude,GPS Alt,Knot,Deg,Sattelite,");
Sigma884 3:4571111a5996 677 fprintf(fp, "ADXL_x[G],ADXL_y[G],ADXL_z[G],Battery_V[V],Battery_I[A],");
Sigma884 3:4571111a5996 678 fprintf(fp, "Pres[hPa],Temp[degC],Hum[%%],Alt[m],Alt_ave[m],Speed[m/s],Speed_ave[m/s],");
Sigma884 3:4571111a5996 679 fprintf(fp, "Acc_x[m/s^2],Acc_y[m/s^2],Acc_z[m/s^2],Mag_x[uT],Mag_y[uT],Mag_z[uT],Gyro_x[deg/s],Gyro_y[deg/s],Gyro_z[deg/s],");
Sigma884 3:4571111a5996 680 fprintf(fp, "Q_w,Q_x,Q_y,Q_z,Yaw[deg],Roll[deg],Pitch[deg],");
Sigma884 3:4571111a5996 681 fprintf(fp, "CO2[ppm],TVOCs[ppm],");
Sigma884 3:4571111a5996 682 fprintf(fp, "Bottle Pres[MPa]\r\n");
Sigma884 3:4571111a5996 683 tick_save.detach();
Sigma884 3:4571111a5996 684 tick_save.attach(&recData, 1.0f);
Sigma884 3:4571111a5996 685 save_slow = true;
Sigma884 3:4571111a5996 686 }
Sigma884 1:6dea30c8b406 687 }
Sigma884 0:03be138291de 688
Sigma884 0:03be138291de 689
Sigma884 0:03be138291de 690 /*******************************************************************************
Sigma884 0:03be138291de 691 データを最速で書き込み開始
Sigma884 0:03be138291de 692 *******************************************************************************/
Sigma884 1:6dea30c8b406 693 void startRecFast(){
Sigma884 3:4571111a5996 694 if(!save_slow && !save_fast){
Sigma884 3:4571111a5996 695 fp = fopen(file_name, "a");
Sigma884 3:4571111a5996 696 fprintf(fp, "Time,Flight Time,Phase,Controll,Flight Pin,");
Sigma884 3:4571111a5996 697 fprintf(fp, "Valve1,Valve2,Valve3,Valve4,Buzzer,");
Sigma884 3:4571111a5996 698 fprintf(fp, "GPS Y/N,GPS Time,Latitude,Longitude,GPS Alt,Knot,Deg,Sattelite,");
Sigma884 3:4571111a5996 699 fprintf(fp, "ADXL_x[G],ADXL_y[G],ADXL_z[G],Battery_V[V],Battery_I[A],");
Sigma884 3:4571111a5996 700 fprintf(fp, "Pres[hPa],Temp[degC],Hum[%%],Alt[m],Alt_ave[m],Speed[m/s],Speed_ave[m/s],");
Sigma884 3:4571111a5996 701 fprintf(fp, "Acc_x[m/s^2],Acc_y[m/s^2],Acc_z[m/s^2],Mag_x[uT],Mag_y[uT],Mag_z[uT],Gyro_x[deg/s],Gyro_y[deg/s],Gyro_z[deg/s],");
Sigma884 3:4571111a5996 702 fprintf(fp, "Q_w,Q_x,Q_y,Q_z,Yaw[deg],Roll[deg],Pitch[deg],");
Sigma884 3:4571111a5996 703 fprintf(fp, "CO2[ppm],TVOCs[ppm],");
Sigma884 3:4571111a5996 704 fprintf(fp, "Bottle Pres[MPa]\r\n");
Sigma884 3:4571111a5996 705 tick_save.detach();
Sigma884 3:4571111a5996 706 save_fast = true;
Sigma884 3:4571111a5996 707 }
Sigma884 1:6dea30c8b406 708 }
Sigma884 0:03be138291de 709
Sigma884 0:03be138291de 710
Sigma884 0:03be138291de 711 /*******************************************************************************
Sigma884 0:03be138291de 712 データ記録停止
Sigma884 0:03be138291de 713 *******************************************************************************/
Sigma884 1:6dea30c8b406 714 void stopRec(){
Sigma884 3:4571111a5996 715 if(save_slow){
Sigma884 3:4571111a5996 716 save_slow = false;
Sigma884 3:4571111a5996 717 tick_save.detach();
Sigma884 3:4571111a5996 718 fprintf(fp, "\r\n\n");
Sigma884 3:4571111a5996 719 fclose(fp);
Sigma884 3:4571111a5996 720 }
Sigma884 3:4571111a5996 721 else if(save_fast){
Sigma884 3:4571111a5996 722 save_fast = false;
Sigma884 3:4571111a5996 723 fprintf(fp, "\r\n\n");
Sigma884 3:4571111a5996 724 fclose(fp);
Sigma884 3:4571111a5996 725 }
Sigma884 1:6dea30c8b406 726 }
Sigma884 0:03be138291de 727
Sigma884 0:03be138291de 728
Sigma884 0:03be138291de 729 /*******************************************************************************
Sigma884 3:4571111a5996 730 データの書き込み
Sigma884 0:03be138291de 731 *******************************************************************************/
Sigma884 1:6dea30c8b406 732 void recData(){
Sigma884 3:4571111a5996 733 fprintf(fp, "%d:%02d.%03d,", time_min, time_sec, time_ms);
Sigma884 3:4571111a5996 734 fprintf(fp, "%d:%02d.%03d,", flight_time_min, flight_time_sec, flight_time_ms);
Sigma884 1:6dea30c8b406 735
Sigma884 3:4571111a5996 736 switch(CanSat_phase){
Sigma884 3:4571111a5996 737 case CANSAT_SETUP:
Sigma884 3:4571111a5996 738 fprintf(fp, "SETUP,");
Sigma884 3:4571111a5996 739 break;
Sigma884 3:4571111a5996 740
Sigma884 3:4571111a5996 741 case CANSAT_SAFETY:
Sigma884 3:4571111a5996 742 fprintf(fp, "SAFETY,");
Sigma884 3:4571111a5996 743 break;
Sigma884 3:4571111a5996 744
Sigma884 3:4571111a5996 745 case CANSAT_WAIT:
Sigma884 3:4571111a5996 746 fprintf(fp, "WAIT,");
Sigma884 3:4571111a5996 747 break;
Sigma884 3:4571111a5996 748
Sigma884 3:4571111a5996 749 case CANSAT_FLIGHT:
Sigma884 3:4571111a5996 750 fprintf(fp, "FLIGHT,");
Sigma884 3:4571111a5996 751 break;
Sigma884 3:4571111a5996 752
Sigma884 3:4571111a5996 753 case CANSAT_RECOVERY:
Sigma884 3:4571111a5996 754 fprintf(fp, "RECOVERY,");
Sigma884 3:4571111a5996 755 break;
Sigma884 3:4571111a5996 756 }
Sigma884 3:4571111a5996 757
Sigma884 3:4571111a5996 758 fprintf(fp, "%d,", controll_yn);
Sigma884 3:4571111a5996 759 fprintf(fp, "%d,", flight_pin);
Sigma884 3:4571111a5996 760 fprintf(fp, "%d,%d,%d,%d,%d,", Valve1.status, Valve2.status, Valve3.status, Valve4.status, Buzzer.status);
Sigma884 3:4571111a5996 761 fprintf(fp, "%c,", es920_uplink_command);
Sigma884 3:4571111a5996 762 es920_uplink_command = '-';
Sigma884 3:4571111a5996 763
Sigma884 3:4571111a5996 764 fprintf(fp, "%d,", gps_yn);
Sigma884 3:4571111a5996 765 fprintf(fp, "%d/%d/%d ", (int)gps_utc[0], (int)gps_utc[1], (int)gps_utc[2]); //日付
Sigma884 3:4571111a5996 766 fprintf(fp, "%d:%02d:%02.2f,", (int)gps_utc[3], (int)gps_utc[4], gps_utc[5]); //時間
Sigma884 3:4571111a5996 767 fprintf(fp, "%3.7f,%3.7f,%.2f,", gps_lat, gps_lon, gps_alt); //GPS座標
Sigma884 3:4571111a5996 768 fprintf(fp, "%.2f,%.2f,", gps_knot, gps_deg); //GPS速度
Sigma884 3:4571111a5996 769 fprintf(fp, "%d,", gps_sat); //GPS衛星数
Sigma884 3:4571111a5996 770
Sigma884 3:4571111a5996 771 fprintf(fp, "%.2f,%.2f,%.2f,%f,%f,", adxl_acc[0], adxl_acc[1], adxl_acc[2], ina_v, ina_i);
Sigma884 3:4571111a5996 772 fprintf(fp, "%f,%f,%f,%f,%f,%f,%f,", pres, temp, hum, alt, alt_ave, speed, speed_ave);
Sigma884 3:4571111a5996 773 fprintf(fp, "%f,%f,%f,%f,%f,%f,%f,%f,%f,", amg[0], amg[1], amg[2], amg[3], amg[4], amg[5], amg[6], amg[7], amg[8]);
Sigma884 3:4571111a5996 774 fprintf(fp, "%f,%f,%f,%f,", quart[0], quart[1], quart[2], quart[3]);
Sigma884 3:4571111a5996 775 fprintf(fp, "%.2f,%.2f,%.2f,", euler[0], euler[1], euler[2]);
Sigma884 3:4571111a5996 776 fprintf(fp, "%d,%d,", CO2, TVOCs);
Sigma884 3:4571111a5996 777 fprintf(fp, "%f\r\n", bottle_pres);
Sigma884 3:4571111a5996 778
Sigma884 4:b878dce9c247 779 /////////////////////////////////////////////////////////////////////EEPROM
Sigma884 4:b878dce9c247 780 EEPROM.chargeBuff((unsigned short)time_reset);
Sigma884 4:b878dce9c247 781 EEPROM.chargeBuff((int)time_read);
Sigma884 4:b878dce9c247 782 EEPROM.chargeBuff((unsigned short)flight_time_reset);
Sigma884 4:b878dce9c247 783 EEPROM.chargeBuff((int)flight_time_read);
Sigma884 4:b878dce9c247 784 EEPROM.chargeBuff((char)CanSat_phase);
Sigma884 4:b878dce9c247 785 char status = 0x00;
Sigma884 4:b878dce9c247 786 if(controll_yn) status |= 0x01;
Sigma884 4:b878dce9c247 787 if(flight_pin) status |= 0x02;
Sigma884 4:b878dce9c247 788 if(Valve1.status) status |= 0x04;
Sigma884 4:b878dce9c247 789 if(Valve2.status) status |= 0x08;
Sigma884 4:b878dce9c247 790 if(Valve3.status) status |= 0x10;
Sigma884 4:b878dce9c247 791 if(Valve4.status) status |= 0x20;
Sigma884 4:b878dce9c247 792 if(Buzzer.status) status |= 0x40;
Sigma884 4:b878dce9c247 793 EEPROM.chargeBuff((char)status);
Sigma884 4:b878dce9c247 794 EEPROM.chargeBuff((char)es920_uplink_command);
Sigma884 4:b878dce9c247 795 EEPROM.chargeBuff((char)gps_yn);
Sigma884 4:b878dce9c247 796 EEPROM.chargeBuff((float)gps_lat);
Sigma884 4:b878dce9c247 797 EEPROM.chargeBuff((float)gps_lon);
Sigma884 4:b878dce9c247 798 EEPROM.chargeBuff((float)gps_alt);
Sigma884 4:b878dce9c247 799 EEPROM.chargeBuff((float)gps_knot);
Sigma884 4:b878dce9c247 800 EEPROM.chargeBuff((float)gps_deg);
Sigma884 4:b878dce9c247 801 EEPROM.chargeBuff((unsigned short)gps_sat);
Sigma884 4:b878dce9c247 802 EEPROM.chargeBuff((float)adxl_acc[0]);
Sigma884 4:b878dce9c247 803 EEPROM.chargeBuff((float)adxl_acc[1]);
Sigma884 4:b878dce9c247 804 EEPROM.chargeBuff((float)adxl_acc[2]);
Sigma884 4:b878dce9c247 805 EEPROM.chargeBuff((float)ina_v);
Sigma884 4:b878dce9c247 806 EEPROM.chargeBuff((float)ina_i);
Sigma884 4:b878dce9c247 807 EEPROM.chargeBuff((float)pres);
Sigma884 4:b878dce9c247 808 EEPROM.chargeBuff((float)temp);
Sigma884 4:b878dce9c247 809 EEPROM.chargeBuff((float)hum);
Sigma884 4:b878dce9c247 810 EEPROM.chargeBuff((float)alt);
Sigma884 4:b878dce9c247 811 EEPROM.chargeBuff((float)speed);
Sigma884 4:b878dce9c247 812 EEPROM.chargeBuff((short)(amg[0] / ES920_MAX_50));
Sigma884 4:b878dce9c247 813 EEPROM.chargeBuff((short)(amg[1] / ES920_MAX_50));
Sigma884 4:b878dce9c247 814 EEPROM.chargeBuff((short)(amg[2] / ES920_MAX_50));
Sigma884 4:b878dce9c247 815 EEPROM.chargeBuff((short)(amg[3] / ES920_MAX_50));
Sigma884 4:b878dce9c247 816 EEPROM.chargeBuff((short)(amg[4] / ES920_MAX_50));
Sigma884 4:b878dce9c247 817 EEPROM.chargeBuff((short)(amg[5] / ES920_MAX_50));
Sigma884 4:b878dce9c247 818 EEPROM.chargeBuff((short)(amg[6] / ES920_MAX_50));
Sigma884 4:b878dce9c247 819 EEPROM.chargeBuff((short)(amg[7] / ES920_MAX_50));
Sigma884 4:b878dce9c247 820 EEPROM.chargeBuff((short)(amg[8] / ES920_MAX_50));
Sigma884 4:b878dce9c247 821 EEPROM.chargeBuff((float)quart[0]);
Sigma884 4:b878dce9c247 822 EEPROM.chargeBuff((float)quart[1]);
Sigma884 4:b878dce9c247 823 EEPROM.chargeBuff((float)quart[2]);
Sigma884 4:b878dce9c247 824 EEPROM.chargeBuff((float)quart[3]);
Sigma884 4:b878dce9c247 825 EEPROM.chargeBuff((short)(euler[0] / ES920_MAX_500));
Sigma884 4:b878dce9c247 826 EEPROM.chargeBuff((short)(euler[1] / ES920_MAX_500));
Sigma884 4:b878dce9c247 827 EEPROM.chargeBuff((short)(euler[2] / ES920_MAX_500));
Sigma884 4:b878dce9c247 828 EEPROM.chargeBuff((unsigned short)CO2);
Sigma884 4:b878dce9c247 829 EEPROM.chargeBuff((unsigned short)TVOCs);
Sigma884 4:b878dce9c247 830 EEPROM.chargeBuff((float)bottle_pres);
Sigma884 4:b878dce9c247 831 EEPROM.writeBuff();
Sigma884 4:b878dce9c247 832 eeprom_ptr = EEPROM.setNextPage();
Sigma884 1:6dea30c8b406 833 }
Sigma884 0:03be138291de 834
Sigma884 0:03be138291de 835
Sigma884 0:03be138291de 836 /*******************************************************************************
Sigma884 2:a443df6115bc 837 ブザーのオンオフ切り替え
Sigma884 2:a443df6115bc 838 *******************************************************************************/
Sigma884 2:a443df6115bc 839 void buzzerChange(){
Sigma884 3:4571111a5996 840 if(Buzzer.status){
Sigma884 3:4571111a5996 841 Buzzer.fire_off();
Sigma884 3:4571111a5996 842 }
Sigma884 3:4571111a5996 843 else{
Sigma884 3:4571111a5996 844 Buzzer.fire_off();
Sigma884 3:4571111a5996 845 }
Sigma884 2:a443df6115bc 846 }
Sigma884 2:a443df6115bc 847
Sigma884 2:a443df6115bc 848
Sigma884 2:a443df6115bc 849 /*******************************************************************************
Sigma884 0:03be138291de 850 セットアップ(最初に1回実行)
Sigma884 0:03be138291de 851 無線あり:HEADER_SETUP_SENSOR
Sigma884 0:03be138291de 852 無線あり:HEADER_GPS_SETUP
Sigma884 0:03be138291de 853 *******************************************************************************/
Sigma884 0:03be138291de 854 void setup(){
Sigma884 0:03be138291de 855 wait(1.0f);
Sigma884 0:03be138291de 856 char setup_string[1024];
Sigma884 0:03be138291de 857
Sigma884 0:03be138291de 858 pc.printf("\r\n******************************\r\n");
Sigma884 0:03be138291de 859 pc.printf("Sensor Setting Start!!\r\n");
Sigma884 0:03be138291de 860 strcat(setup_string, "Sensor Setting Start!!\r\n");
Sigma884 0:03be138291de 861 es920 << HEADER_SENSOR_SETUP;
Sigma884 0:03be138291de 862
Sigma884 0:03be138291de 863 //////////////////////////////////////////////////ADXL375
Sigma884 0:03be138291de 864 ADXL375.setDataRate(ADXL375_100HZ);
Sigma884 0:03be138291de 865 if(ADXL375.whoAmI() == 1){
Sigma884 0:03be138291de 866 pc.printf("ADXL375 : OK\r\n");
Sigma884 0:03be138291de 867 strcat(setup_string, "ADXL375 : OK\r\n");
Sigma884 0:03be138291de 868 es920 << (char)0x01;
Sigma884 0:03be138291de 869 }
Sigma884 0:03be138291de 870 else{
Sigma884 0:03be138291de 871 pc.printf("ADXL375 : NG\r\n");
Sigma884 0:03be138291de 872 strcat(setup_string, "ADXL375 : NG\r\n");
Sigma884 0:03be138291de 873 es920 << (char)0x00;
Sigma884 0:03be138291de 874 }
Sigma884 0:03be138291de 875 ADXL375.offset(0.0f, 0.0f, 0.0f);
Sigma884 0:03be138291de 876
Sigma884 0:03be138291de 877 //////////////////////////////////////////////////INA226
Sigma884 0:03be138291de 878 INA226.set_callibretion();
Sigma884 0:03be138291de 879 if(INA226.Connection_check() == 0){
Sigma884 0:03be138291de 880 pc.printf("INA226 : OK\r\n");
Sigma884 0:03be138291de 881 strcat(setup_string, "INA226 : OK!!\r\n");
Sigma884 0:03be138291de 882 es920 << (char)0x01;
Sigma884 0:03be138291de 883 }
Sigma884 0:03be138291de 884 else{
Sigma884 0:03be138291de 885 pc.printf("INA226 : NG\r\n");
Sigma884 0:03be138291de 886 strcat(setup_string, "INA226 : NG\r\n");
Sigma884 0:03be138291de 887 es920 << (char)0x00;
Sigma884 0:03be138291de 888 }
Sigma884 0:03be138291de 889
Sigma884 0:03be138291de 890 //////////////////////////////////////////////////BME280
Sigma884 0:03be138291de 891 BME280.configMeasure(BME280_lib::NORMAL, 1, 2, 1);
Sigma884 0:03be138291de 892 BME280.configFilter(4);
Sigma884 0:03be138291de 893 if(BME280.connectCheck() == 1){
Sigma884 0:03be138291de 894 pc.printf("BME280 OK!!\r\n");
Sigma884 0:03be138291de 895 strcat(setup_string, "BME280 : OK!!\r\n");
Sigma884 0:03be138291de 896 es920 << (char)0x01;
Sigma884 0:03be138291de 897 }
Sigma884 0:03be138291de 898 else{
Sigma884 0:03be138291de 899 pc.printf("BME280 NG\r\n");
Sigma884 0:03be138291de 900 strcat(setup_string, "BME280 : NG\r\n");
Sigma884 0:03be138291de 901 es920 << (char)0x00;
Sigma884 0:03be138291de 902 }
Sigma884 0:03be138291de 903
Sigma884 0:03be138291de 904 //////////////////////////////////////////////////BNO055
Sigma884 0:03be138291de 905 BNO055.setOperationMode(BNO055_lib::CONFIG);
Sigma884 0:03be138291de 906 BNO055.setAccRange(BNO055_lib::_16G);
Sigma884 0:03be138291de 907 BNO055.setAxis(BNO055_lib::Z, BNO055_lib::Y, BNO055_lib::X);
Sigma884 0:03be138291de 908 BNO055.setAxisPM(1, 1, -1);
Sigma884 0:03be138291de 909 if(BNO055.connectCheck() == 1){
Sigma884 0:03be138291de 910 pc.printf("BNO055 OK!!\r\n");
Sigma884 0:03be138291de 911 strcat(setup_string, "BNO055 : OK!!\r\n");
Sigma884 0:03be138291de 912 es920 << (char)0x01;
Sigma884 0:03be138291de 913 }
Sigma884 0:03be138291de 914 else{
Sigma884 0:03be138291de 915 pc.printf("BNO055 NG\r\n");
Sigma884 0:03be138291de 916 strcat(setup_string, "BNO055 : NG\r\n");
Sigma884 0:03be138291de 917 es920 << (char)0x00;
Sigma884 0:03be138291de 918 }
Sigma884 1:6dea30c8b406 919 BNO055.setOperationMode(BNO055_lib::NDOF);
Sigma884 0:03be138291de 920
Sigma884 0:03be138291de 921 //////////////////////////////////////////////////CCS811
Sigma884 0:03be138291de 922 if(CCS811.connectCheck() == 1){
Sigma884 0:03be138291de 923 pc.printf("CCS811 OK!!\r\n");
Sigma884 0:03be138291de 924 strcat(setup_string, "CCS811 : OK!!\r\n");
Sigma884 0:03be138291de 925 es920 << (char)0x01;
Sigma884 0:03be138291de 926 }
Sigma884 0:03be138291de 927 else{
Sigma884 0:03be138291de 928 pc.printf("CCS811 NG\r\n");
Sigma884 0:03be138291de 929 strcat(setup_string, "CCS811 : NG\r\n");
Sigma884 0:03be138291de 930 es920 << (char)0x00;
Sigma884 0:03be138291de 931 }
Sigma884 0:03be138291de 932
Sigma884 0:03be138291de 933 //////////////////////////////////////////////////圧力センサ
Sigma884 0:03be138291de 934 pc.printf("PRES : ");
Sigma884 0:03be138291de 935 ADS1115.setGain(GAIN_TWOTHIRDS);
Sigma884 0:03be138291de 936 pc.printf("OK!!\r\n");
Sigma884 0:03be138291de 937 strcat(setup_string, "PRES : OK!!\r\n");
Sigma884 0:03be138291de 938 es920 << (char)0x01;
Sigma884 0:03be138291de 939
Sigma884 0:03be138291de 940 //////////////////////////////////////////////////SD
Sigma884 0:03be138291de 941 fp = fopen("/sd/Space_SWAN_setup.txt", "r");
Sigma884 0:03be138291de 942 if(fp != NULL){
Sigma884 0:03be138291de 943 pc.printf("SD : OK!!\r\n");
Sigma884 0:03be138291de 944 strcat(setup_string, "SD : OK!!\r\n");
Sigma884 0:03be138291de 945 es920 << (char)0x01;
Sigma884 0:03be138291de 946 fclose(fp);
Sigma884 0:03be138291de 947 }
Sigma884 0:03be138291de 948 else{
Sigma884 0:03be138291de 949 pc.printf("SD : NG...\r\n");
Sigma884 0:03be138291de 950 strcat(setup_string, "SD : NG...\r\n");
Sigma884 0:03be138291de 951 es920 << (char)0x00;
Sigma884 0:03be138291de 952 }
Sigma884 0:03be138291de 953
Sigma884 0:03be138291de 954 pc.printf("Sensor Setting Finished!!\r\n");
Sigma884 0:03be138291de 955 pc.printf("******************************\r\n");
Sigma884 0:03be138291de 956 strcat(setup_string, "Sensor Setting Finished!!\r\n");
Sigma884 0:03be138291de 957 es920.send();
Sigma884 0:03be138291de 958 wait(1.0f);
Sigma884 0:03be138291de 959
Sigma884 0:03be138291de 960 pc.printf("\r\n******************************\r\n");
Sigma884 0:03be138291de 961 if(wait_GPS){
Sigma884 0:03be138291de 962 pc.printf("GPS Setting Start!!\r\n");
Sigma884 0:03be138291de 963 strcat(setup_string, "GPS Setting Start!!\r\n");
Sigma884 0:03be138291de 964
Sigma884 0:03be138291de 965 pc.printf("Waiting : 0");
Sigma884 0:03be138291de 966 strcat(setup_string, "Wait : ");
Sigma884 0:03be138291de 967 int gps_wait_count = 0;
Sigma884 0:03be138291de 968 while(!GPS.gps_readable){
Sigma884 0:03be138291de 969 pc.printf("\rWaiting : %d", gps_wait_count);//
Sigma884 0:03be138291de 970 es920 << HEADER_GPS_SETUP;
Sigma884 0:03be138291de 971 es920 << (char)GPS.gps_readable;
Sigma884 0:03be138291de 972 es920 << (int)gps_wait_count;
Sigma884 0:03be138291de 973 es920.send();
Sigma884 0:03be138291de 974 wait(1.0f);
Sigma884 0:03be138291de 975 gps_wait_count ++;
Sigma884 0:03be138291de 976 }
Sigma884 0:03be138291de 977 char ss[8];
Sigma884 0:03be138291de 978 sprintf(ss, "%d", gps_wait_count);
Sigma884 0:03be138291de 979 strcat(setup_string, ss);
Sigma884 0:03be138291de 980 pc.printf(" OK!!\r\n");
Sigma884 0:03be138291de 981 strcat(setup_string, " OK!!\r\n");
Sigma884 0:03be138291de 982 pc.printf("GPS Setting Finished!!\r\n");
Sigma884 0:03be138291de 983 strcat(setup_string, "GPS Setting Finished!!\r\n");
Sigma884 0:03be138291de 984 es920 << HEADER_GPS_SETUP;
Sigma884 0:03be138291de 985 es920 << (char)0xAA;
Sigma884 0:03be138291de 986 es920 << (int)0;
Sigma884 0:03be138291de 987 es920.send();
Sigma884 0:03be138291de 988 }
Sigma884 0:03be138291de 989 else{
Sigma884 0:03be138291de 990 pc.printf("GPS Setting Ignore...\r\n");
Sigma884 0:03be138291de 991 strcat(setup_string, "GPS Setting Ignore...\r\n");
Sigma884 0:03be138291de 992 es920 << HEADER_GPS_SETUP;
Sigma884 0:03be138291de 993 es920 << (char)0xFF;
Sigma884 0:03be138291de 994 es920 << (int)0;
Sigma884 0:03be138291de 995 es920.send();
Sigma884 0:03be138291de 996 }
Sigma884 0:03be138291de 997 pc.printf("******************************\r\n");
Sigma884 0:03be138291de 998 fp = fopen(file_name, "a");
Sigma884 0:03be138291de 999 fprintf(fp, setup_string);
Sigma884 0:03be138291de 1000 fclose(fp);
Sigma884 0:03be138291de 1001 setup_string[0] = NULL;
Sigma884 0:03be138291de 1002
Sigma884 3:4571111a5996 1003 EEPROM.setWriteAddr(1, 0, 0x00, 0x00);
Sigma884 3:4571111a5996 1004
Sigma884 0:03be138291de 1005 printHelp();
Sigma884 0:03be138291de 1006 wait(1.0f);
Sigma884 0:03be138291de 1007 }