高高度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
main.cpp@1:6dea30c8b406, 2019-02-19 (annotated)
- 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?
User | Revision | Line number | New 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 | } |