SSLM1 / Mbed 2 deprecated 5-6_checkmode

Dependencies:   2_MPU9250 mbed 2_GPS_GMS6-CR6 2_LPS33HW 2_EEPROM 2_P7100

Committer:
rary
Date:
Mon Jul 27 12:39:33 2020 +0000
Revision:
0:9fb816db0c8b
Child:
1:80140aac4bec
add checkmode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rary 0:9fb816db0c8b 1 #include "mbed.h"
rary 0:9fb816db0c8b 2 #include "math.h"
rary 0:9fb816db0c8b 3 #include "EEPROM.h"
rary 0:9fb816db0c8b 4 #include "LPS33HW.h"
rary 0:9fb816db0c8b 5 #include "P7100.h"
rary 0:9fb816db0c8b 6 #include "MPU9250.h"
rary 0:9fb816db0c8b 7 #include "GMS6_CR6.h"
rary 0:9fb816db0c8b 8
rary 0:9fb816db0c8b 9
rary 0:9fb816db0c8b 10 Timer t; //時間計測
rary 0:9fb816db0c8b 11 Serial pc(USBTX, USBRX);
rary 0:9fb816db0c8b 12 LPS33HW lps(p9, p10);
rary 0:9fb816db0c8b 13 EEPROM rom(p9, p10);
rary 0:9fb816db0c8b 14 MPU9250 mpu(p9, p10);
rary 0:9fb816db0c8b 15 P7100 p7100(p5, p6, p7, p8);
rary 0:9fb816db0c8b 16 Serial twe(p28, p27); //EFM:p28, p27
rary 0:9fb816db0c8b 17 GMS6_CR6 gps(p13, p14); //EFM:p13, p14
rary 0:9fb816db0c8b 18
rary 0:9fb816db0c8b 19 DigitalIn Flight_Pin(p30);
rary 0:9fb816db0c8b 20 DigitalOut ThrustValve(p21);
rary 0:9fb816db0c8b 21 DigitalOut DepressValve(p22);
rary 0:9fb816db0c8b 22 DigitalOut LED_1(p23);
rary 0:9fb816db0c8b 23 DigitalOut LED_2(p24);
rary 0:9fb816db0c8b 24 DigitalOut LED_3(p25);
rary 0:9fb816db0c8b 25 DigitalOut LED_4(p26);
rary 0:9fb816db0c8b 26
rary 0:9fb816db0c8b 27 void get_save_low(); //自作関数プロトタイプ宣言
rary 0:9fb816db0c8b 28 float get_save_high(); //自作関数プロトタイプ宣言
rary 0:9fb816db0c8b 29 void recovery(); //自作関数プロトタイプ宣言
rary 0:9fb816db0c8b 30 void check();
rary 0:9fb816db0c8b 31
rary 0:9fb816db0c8b 32 char s[64]; //データ取得配列
rary 0:9fb816db0c8b 33 float accel[3], gyro[3]; //MPU9250data
rary 0:9fb816db0c8b 34 float AX, AY, AZ, GX, GY, GZ; //MPU9250data
rary 0:9fb816db0c8b 35 float T; //時刻データ
rary 0:9fb816db0c8b 36 float P; //気圧データ取得
rary 0:9fb816db0c8b 37 float V; //電圧取得
rary 0:9fb816db0c8b 38 float TP = 0.25 * V - 0.125; //タンク圧力換算
rary 0:9fb816db0c8b 39
rary 0:9fb816db0c8b 40 int pointer_high = 0; //EEPROM保存アドレス(high)
rary 0:9fb816db0c8b 41 int pointer_low = 0; //EEPROM保存アドレス(low)
rary 0:9fb816db0c8b 42
rary 0:9fb816db0c8b 43 float lat_north; //GPS緯度
rary 0:9fb816db0c8b 44 float lon_east; //GPS経度
rary 0:9fb816db0c8b 45 float GPS[2]; //GPSデータ格納配列
rary 0:9fb816db0c8b 46
rary 0:9fb816db0c8b 47 //main
rary 0:9fb816db0c8b 48 int main()
rary 0:9fb816db0c8b 49 {
rary 0:9fb816db0c8b 50 pc.baud(460800); //ボーレート変更
rary 0:9fb816db0c8b 51 twe.baud(230400); //tweボーレート変更
rary 0:9fb816db0c8b 52
rary 0:9fb816db0c8b 53 ThrustValve = 0; //DigitalOut初期化
rary 0:9fb816db0c8b 54 DepressValve = 0;
rary 0:9fb816db0c8b 55 LED_1 = 0;
rary 0:9fb816db0c8b 56 LED_2 = 0;
rary 0:9fb816db0c8b 57 LED_3 = 0;
rary 0:9fb816db0c8b 58 LED_4 = 0;
rary 0:9fb816db0c8b 59
rary 0:9fb816db0c8b 60 //判定用変数
rary 0:9fb816db0c8b 61 double groundP = 0; //地上の気圧データ
rary 0:9fb816db0c8b 62 double heightP = 0; //高度TBDmの気圧
rary 0:9fb816db0c8b 63 double judgeP[5]; //判定用気圧データ
rary 0:9fb816db0c8b 64 double pastP = 0; //一つ前の気圧データ
rary 0:9fb816db0c8b 65 double dP[5]; //気圧データの差異
rary 0:9fb816db0c8b 66 int judge = 0; //判定結果
rary 0:9fb816db0c8b 67 int i = 0; //差異配列の番号
rary 0:9fb816db0c8b 68 memset(judgeP, 0, 5);
rary 0:9fb816db0c8b 69 memset(dP, 1, 5);
rary 0:9fb816db0c8b 70
rary 0:9fb816db0c8b 71 int n_dvalve = 0; //脱圧バルブの開閉回数
rary 0:9fb816db0c8b 72
rary 0:9fb816db0c8b 73 t.start(); //timer Start
rary 0:9fb816db0c8b 74
rary 0:9fb816db0c8b 75 //sensor Setup
rary 0:9fb816db0c8b 76 lps.start(1); //気圧センサスタート
rary 0:9fb816db0c8b 77 lps.start(1); //気圧センサスタート
rary 0:9fb816db0c8b 78 wait(0.1);
rary 0:9fb816db0c8b 79 mpu.start(); //MPU9250 start&setup
rary 0:9fb816db0c8b 80 mpu.accelsetup(3);
rary 0:9fb816db0c8b 81 mpu.gyrosetup(3);
rary 0:9fb816db0c8b 82 mpu.AKsetup(1);
rary 0:9fb816db0c8b 83 wait(0.2);
rary 0:9fb816db0c8b 84
rary 0:9fb816db0c8b 85 pc.printf("Power ON!\r\n");
rary 0:9fb816db0c8b 86 twe.printf("Power ON!\r\n");
rary 0:9fb816db0c8b 87 wait(2);
rary 0:9fb816db0c8b 88
rary 0:9fb816db0c8b 89 //Check mode
rary 0:9fb816db0c8b 90 pc.printf("Check mode Start!\r\n");
rary 0:9fb816db0c8b 91 twe.printf("Check mode Start!\r\n");
rary 0:9fb816db0c8b 92 //valve check
rary 0:9fb816db0c8b 93 ThrustValve = 1;wait(1);ThrustValve = 0;
rary 0:9fb816db0c8b 94 wait(1);
rary 0:9fb816db0c8b 95 ThrustValve = 1;wait(1);ThrustValve = 0;
rary 0:9fb816db0c8b 96 wait(2);
rary 0:9fb816db0c8b 97 DepressValve = 1;wait(1);DepressValve = 0;
rary 0:9fb816db0c8b 98 wait(1);
rary 0:9fb816db0c8b 99 DepressValve = 1;wait(1);DepressValve = 0;
rary 0:9fb816db0c8b 100 wait(1);
rary 0:9fb816db0c8b 101
rary 0:9fb816db0c8b 102 for(int c = 0; c < 60 ; c++) {
rary 0:9fb816db0c8b 103 LED_1 = 1;
rary 0:9fb816db0c8b 104 LED_2 = 1;
rary 0:9fb816db0c8b 105 LED_3 = 1;
rary 0:9fb816db0c8b 106 LED_4 = 1;
rary 0:9fb816db0c8b 107 check();
rary 0:9fb816db0c8b 108 LED_1 = 0;
rary 0:9fb816db0c8b 109 LED_2 = 0;
rary 0:9fb816db0c8b 110 LED_3 = 0;
rary 0:9fb816db0c8b 111 LED_4 = 0;
rary 0:9fb816db0c8b 112 wait(1);
rary 0:9fb816db0c8b 113 }
rary 0:9fb816db0c8b 114
rary 0:9fb816db0c8b 115
rary 0:9fb816db0c8b 116
rary 0:9fb816db0c8b 117 //地上の気圧取得&計算
rary 0:9fb816db0c8b 118 pc.printf("Calibration Start!\r\n");
rary 0:9fb816db0c8b 119 twe.printf("Calibration Start!\r\n");
rary 0:9fb816db0c8b 120 for(int a = 0; a < 1000; a++) {
rary 0:9fb816db0c8b 121 groundP = groundP + lps.data_read();
rary 0:9fb816db0c8b 122 wait_ms(50);
rary 0:9fb816db0c8b 123 }
rary 0:9fb816db0c8b 124 groundP = groundP/1000; //地上の気圧データ
rary 0:9fb816db0c8b 125 heightP = 0.998862 * groundP; //高度10mの気圧を計算
rary 0:9fb816db0c8b 126
rary 0:9fb816db0c8b 127
rary 0:9fb816db0c8b 128
rary 0:9fb816db0c8b 129 //Wait mode
rary 0:9fb816db0c8b 130 pc.printf("Wait mode Start!\r\n");
rary 0:9fb816db0c8b 131 twe.printf("Wait mode Start!\r\n");
rary 0:9fb816db0c8b 132 LED_1 = 1;
rary 0:9fb816db0c8b 133 while(Flight_Pin == 0) {
rary 0:9fb816db0c8b 134 get_save_low(); //data get&save
rary 0:9fb816db0c8b 135 wait_ms(950);
rary 0:9fb816db0c8b 136 }
rary 0:9fb816db0c8b 137 pc.printf("Wait mode Finish!\r\n");
rary 0:9fb816db0c8b 138 twe.printf("Wait mode Finish!\r\n");
rary 0:9fb816db0c8b 139 LED_1 = 0;
rary 0:9fb816db0c8b 140
rary 0:9fb816db0c8b 141
rary 0:9fb816db0c8b 142
rary 0:9fb816db0c8b 143 //Flight mode
rary 0:9fb816db0c8b 144 pc.printf("Flight mode Start!\r\n");
rary 0:9fb816db0c8b 145 twe.printf("Flight mode Start!\r\n");
rary 0:9fb816db0c8b 146 LED_2 = 1;
rary 0:9fb816db0c8b 147 while(1) {
rary 0:9fb816db0c8b 148 judgeP[i] = 0; //初期化
rary 0:9fb816db0c8b 149
rary 0:9fb816db0c8b 150 for(int n = 0; n < 2; n++) { //2回に一回送信
rary 0:9fb816db0c8b 151 judgeP[i] = judgeP[i] + get_save_high(); //data get&save
rary 0:9fb816db0c8b 152 }
rary 0:9fb816db0c8b 153 twe.printf("\r\n"); //送信トリガー
rary 0:9fb816db0c8b 154
rary 0:9fb816db0c8b 155 //判定
rary 0:9fb816db0c8b 156 judgeP[i] = judgeP[i]/2; //判定用気圧を計算
rary 0:9fb816db0c8b 157 dP[i] = judgeP[i] - pastP; //差異を取得
rary 0:9fb816db0c8b 158 pastP = judgeP[i]; //判定用気圧値を過去データに置き換える
rary 0:9fb816db0c8b 159 i++;
rary 0:9fb816db0c8b 160 if(i == 5) {
rary 0:9fb816db0c8b 161 i = 0;
rary 0:9fb816db0c8b 162 }
rary 0:9fb816db0c8b 163
rary 0:9fb816db0c8b 164 if(dP[0] > 0.03 && dP[1] > 0.03 && dP[2] > 0.03 && dP[3] > 0.03 && dP[4] > 0.03) { //空中判定
rary 0:9fb816db0c8b 165 if(judgeP[0] > heightP && judgeP[1] > heightP && judgeP[2] > heightP && judgeP[3] > heightP && judgeP[4] > heightP) { //高度判定
rary 0:9fb816db0c8b 166 judge = 1;
rary 0:9fb816db0c8b 167 break;
rary 0:9fb816db0c8b 168 }
rary 0:9fb816db0c8b 169 } else if(dP[0] <= 0 && dP[1] <= 0 && dP[2] <= 0 && dP[3] <= 0 && dP[4] <= 0) {
rary 0:9fb816db0c8b 170 judge = 1;
rary 0:9fb816db0c8b 171 break;
rary 0:9fb816db0c8b 172 }
rary 0:9fb816db0c8b 173 }
rary 0:9fb816db0c8b 174 pc.printf("Flight mode Finish!\r\n");
rary 0:9fb816db0c8b 175 twe.printf("Flight mode Finish!\r\n");
rary 0:9fb816db0c8b 176 LED_2 = 0;
rary 0:9fb816db0c8b 177
rary 0:9fb816db0c8b 178
rary 0:9fb816db0c8b 179
rary 0:9fb816db0c8b 180 //thruster mode
rary 0:9fb816db0c8b 181 if(judge == 1) {
rary 0:9fb816db0c8b 182 pc.printf("Thruster mode Start!\r\n");
rary 0:9fb816db0c8b 183 twe.printf("Thruster mode Start!\r\n");
rary 0:9fb816db0c8b 184 LED_3 = 1;
rary 0:9fb816db0c8b 185 ThrustValve = 1; //スラスタ電磁弁開
rary 0:9fb816db0c8b 186 for(int k = 0; k < 250; k++) {
rary 0:9fb816db0c8b 187 for(int n = 0; n < 2; n++) { //2回に一回送信
rary 0:9fb816db0c8b 188 get_save_high(); //data get&save
rary 0:9fb816db0c8b 189 }
rary 0:9fb816db0c8b 190 twe.printf("\r\n"); //送信トリガー
rary 0:9fb816db0c8b 191 }
rary 0:9fb816db0c8b 192 ThrustValve = 0; //スラスタ電磁弁閉
rary 0:9fb816db0c8b 193 pc.printf("Thruster mode Finish!\r\n");
rary 0:9fb816db0c8b 194 twe.printf("Thruster mode Finish!\r\n");
rary 0:9fb816db0c8b 195 }
rary 0:9fb816db0c8b 196
rary 0:9fb816db0c8b 197
rary 0:9fb816db0c8b 198
rary 0:9fb816db0c8b 199 //depress mode
rary 0:9fb816db0c8b 200 pc.printf("Depress mode Start!\r\n");
rary 0:9fb816db0c8b 201 twe.printf("Depress mode Start!\r\n");
rary 0:9fb816db0c8b 202 LED_4 = 1;
rary 0:9fb816db0c8b 203 memset(judgeP, 0, 5); //判定初期化
rary 0:9fb816db0c8b 204 memset(dP, 1, 5);
rary 0:9fb816db0c8b 205 pastP = 0;
rary 0:9fb816db0c8b 206
rary 0:9fb816db0c8b 207 while(1) {
rary 0:9fb816db0c8b 208 DepressValve = 1; //脱圧電磁弁開
rary 0:9fb816db0c8b 209
rary 0:9fb816db0c8b 210 judgeP[i] = 0; //初期化
rary 0:9fb816db0c8b 211
rary 0:9fb816db0c8b 212 for(int k = 0; k < 150; k++) {
rary 0:9fb816db0c8b 213 for(int n = 0; n < 2; n++) { //2回に一回送信
rary 0:9fb816db0c8b 214 judgeP[i] = judgeP[i] + get_save_high(); //data get&save
rary 0:9fb816db0c8b 215 }
rary 0:9fb816db0c8b 216 twe.printf("\r\n"); //送信トリガー
rary 0:9fb816db0c8b 217
rary 0:9fb816db0c8b 218 //判定
rary 0:9fb816db0c8b 219 judgeP[i] = judgeP[i]/2; //判定用気圧を計算
rary 0:9fb816db0c8b 220 dP[i] = judgeP[i] - pastP; //差異を取得
rary 0:9fb816db0c8b 221 pastP = judgeP[i]; //判定用気圧値を過去データに置き換える
rary 0:9fb816db0c8b 222
rary 0:9fb816db0c8b 223 if(dP[0] <= 0 && dP[1] <= 0 && dP[2] <= 0 && dP[3] <= 0 && dP[4] <= 0 && n_dvalve > 2 || n_dvalve == 4) { //着地判定
rary 0:9fb816db0c8b 224 judge = 3;
rary 0:9fb816db0c8b 225 break;
rary 0:9fb816db0c8b 226 }
rary 0:9fb816db0c8b 227 i++;
rary 0:9fb816db0c8b 228 if(i == 5) {
rary 0:9fb816db0c8b 229 i = 0;
rary 0:9fb816db0c8b 230 }
rary 0:9fb816db0c8b 231 }
rary 0:9fb816db0c8b 232
rary 0:9fb816db0c8b 233 DepressValve = 0; //脱圧電磁弁閉
rary 0:9fb816db0c8b 234 wait_ms(100);
rary 0:9fb816db0c8b 235 n_dvalve++;
rary 0:9fb816db0c8b 236
rary 0:9fb816db0c8b 237 if(judge == 3) {
rary 0:9fb816db0c8b 238 break; //地上判定を通過したらループを抜ける
rary 0:9fb816db0c8b 239 }
rary 0:9fb816db0c8b 240 }
rary 0:9fb816db0c8b 241 pc.printf("Depress mode Finish!\r\n");
rary 0:9fb816db0c8b 242 twe.printf("Depress mode Finish!\r\n");
rary 0:9fb816db0c8b 243 LED_4 = 0;
rary 0:9fb816db0c8b 244
rary 0:9fb816db0c8b 245
rary 0:9fb816db0c8b 246
rary 0:9fb816db0c8b 247 //recovery mode
rary 0:9fb816db0c8b 248 pc.printf("Recovery mode Start!\r\n");
rary 0:9fb816db0c8b 249 twe.printf("Recovery mode Start!\r\n");
rary 0:9fb816db0c8b 250 LED_1 = 1;
rary 0:9fb816db0c8b 251 LED_2 = 1;
rary 0:9fb816db0c8b 252 LED_4 = 1;
rary 0:9fb816db0c8b 253 while(1) {
rary 0:9fb816db0c8b 254 recovery();
rary 0:9fb816db0c8b 255 }
rary 0:9fb816db0c8b 256 pc.printf("Recovery mode Finish!\r\n");
rary 0:9fb816db0c8b 257 twe.printf("Recovery mode Finish!\r\n");
rary 0:9fb816db0c8b 258 }
rary 0:9fb816db0c8b 259
rary 0:9fb816db0c8b 260
rary 0:9fb816db0c8b 261 //自作関数
rary 0:9fb816db0c8b 262 void get_save_low()
rary 0:9fb816db0c8b 263 {
rary 0:9fb816db0c8b 264 T = t.read(); //時刻データ取得
rary 0:9fb816db0c8b 265 P = lps.data_read(); //気圧データ取得
rary 0:9fb816db0c8b 266 V = p7100.v_read(); //電圧取得
rary 0:9fb816db0c8b 267 TP = 0.25 * V - 0.125; //タンク圧力換算
rary 0:9fb816db0c8b 268
rary 0:9fb816db0c8b 269 mpu.accel_read(3, accel);
rary 0:9fb816db0c8b 270 mpu.gyro_read(3, gyro);
rary 0:9fb816db0c8b 271 AX = accel[0];
rary 0:9fb816db0c8b 272 AY = accel[1];
rary 0:9fb816db0c8b 273 AZ = accel[2];
rary 0:9fb816db0c8b 274 GX = gyro[0];
rary 0:9fb816db0c8b 275 GY = gyro[1];
rary 0:9fb816db0c8b 276 GZ = gyro[2];
rary 0:9fb816db0c8b 277
rary 0:9fb816db0c8b 278 sprintf(s, "%8.3f %8.3f %6.3f %5.3f %5.2f %5.2f %5.2f %5.2f %5.2f\r\n", T, P, TP, AX, AY, AZ, GX, GY, GZ); //floatからchar*へ変換
rary 0:9fb816db0c8b 279
rary 0:9fb816db0c8b 280 rom.write_low(pointer_low, s, 64); // write tha data
rary 0:9fb816db0c8b 281 pointer_low = pointer_low + 64; //アドレスずらし
rary 0:9fb816db0c8b 282
rary 0:9fb816db0c8b 283 pc.printf("%s\r\n", s); //check用
rary 0:9fb816db0c8b 284
rary 0:9fb816db0c8b 285 memset(s, '\0', 64 ); //初期化
rary 0:9fb816db0c8b 286 }
rary 0:9fb816db0c8b 287
rary 0:9fb816db0c8b 288 float get_save_high()
rary 0:9fb816db0c8b 289 {
rary 0:9fb816db0c8b 290 T = t.read(); //時刻データ取得
rary 0:9fb816db0c8b 291 P = lps.data_read(); //気圧データ取得
rary 0:9fb816db0c8b 292 V = p7100.v_read(); //電圧取得
rary 0:9fb816db0c8b 293 TP = 0.25 * V - 0.125; //タンク圧力換算
rary 0:9fb816db0c8b 294
rary 0:9fb816db0c8b 295 mpu.accel_read(3, accel);
rary 0:9fb816db0c8b 296 mpu.gyro_read(3, gyro);
rary 0:9fb816db0c8b 297 AX = accel[0];
rary 0:9fb816db0c8b 298 AY = accel[1];
rary 0:9fb816db0c8b 299 AZ = accel[2];
rary 0:9fb816db0c8b 300 GX = gyro[0];
rary 0:9fb816db0c8b 301 GY = gyro[1];
rary 0:9fb816db0c8b 302 GZ = gyro[2];
rary 0:9fb816db0c8b 303
rary 0:9fb816db0c8b 304 sprintf(s, "%8.3f %8.3f %6.3f %5.2f %5.2f %5.2f %5.2f %5.2f %5.2f\r\n", T, P, TP, AX, AY, AZ, GX, GY, GZ); //floatからchar*へ変換
rary 0:9fb816db0c8b 305
rary 0:9fb816db0c8b 306 rom.write_high(pointer_high, s, 64); // write tha data
rary 0:9fb816db0c8b 307
rary 0:9fb816db0c8b 308 twe.printf("%8.3f %8.3f %6.3f %5.2f,", T, P, TP, AZ); //無線機送信
rary 0:9fb816db0c8b 309
rary 0:9fb816db0c8b 310 pointer_high = pointer_high + 64; //アドレスずらし
rary 0:9fb816db0c8b 311
rary 0:9fb816db0c8b 312 pc.printf("%s\r\n", s); //check用
rary 0:9fb816db0c8b 313
rary 0:9fb816db0c8b 314 memset(s, '\0', 64 ); //初期化
rary 0:9fb816db0c8b 315
rary 0:9fb816db0c8b 316 return P;
rary 0:9fb816db0c8b 317 }
rary 0:9fb816db0c8b 318
rary 0:9fb816db0c8b 319 void recovery()
rary 0:9fb816db0c8b 320 {
rary 0:9fb816db0c8b 321 T = t.read(); //時刻データ取得
rary 0:9fb816db0c8b 322 V = p7100.v_read(); //電圧取得
rary 0:9fb816db0c8b 323 TP = 0.25 * V - 0.125; //タンク圧力換算
rary 0:9fb816db0c8b 324
rary 0:9fb816db0c8b 325 sprintf(s, "%8.3f %6.3f\r\n", T, TP); //floatからchar*へ変換
rary 0:9fb816db0c8b 326
rary 0:9fb816db0c8b 327 rom.write_low(pointer_low, s, 64); // write tha data
rary 0:9fb816db0c8b 328 pointer_low = pointer_low + 64; //アドレスずらし
rary 0:9fb816db0c8b 329
rary 0:9fb816db0c8b 330 pc.printf("%s\r\n", s); //check用
rary 0:9fb816db0c8b 331 twe.printf("%8.3f %6.3f, ", T, TP); //無線機送信
rary 0:9fb816db0c8b 332 memset(s, '\0', 64 ); //初期化
rary 0:9fb816db0c8b 333
rary 0:9fb816db0c8b 334 gps.read_solid(GPS); //測位データ取得
rary 0:9fb816db0c8b 335 lat_north = GPS[0];
rary 0:9fb816db0c8b 336 lon_east = GPS[1];
rary 0:9fb816db0c8b 337
rary 0:9fb816db0c8b 338 if(lat_north > 20 && lat_north < 90 && lon_east > 90 && lon_east < 180) { //緯度が正常な値のときのみ送信
rary 0:9fb816db0c8b 339 twe.printf("%f,%f", lat_north, lon_east); //送信
rary 0:9fb816db0c8b 340 pc.printf("%f,%f\r\n", lat_north, lon_east); //check用
rary 0:9fb816db0c8b 341 }
rary 0:9fb816db0c8b 342 twe.printf("\r\n"); //無線機トリガー
rary 0:9fb816db0c8b 343 memset(GPS,'\0', 2);
rary 0:9fb816db0c8b 344 }
rary 0:9fb816db0c8b 345
rary 0:9fb816db0c8b 346 void check()
rary 0:9fb816db0c8b 347 {
rary 0:9fb816db0c8b 348 T = t.read(); //時刻データ取得
rary 0:9fb816db0c8b 349 P = lps.data_read(); //気圧データ取得
rary 0:9fb816db0c8b 350 V = p7100.v_read(); //電圧取得
rary 0:9fb816db0c8b 351 TP = 0.25 * V - 0.125; //タンク圧力換算
rary 0:9fb816db0c8b 352
rary 0:9fb816db0c8b 353 mpu.accel_read(3, accel);
rary 0:9fb816db0c8b 354 mpu.gyro_read(3, gyro);
rary 0:9fb816db0c8b 355 AX = accel[0];
rary 0:9fb816db0c8b 356 AY = accel[1];
rary 0:9fb816db0c8b 357 AZ = accel[2];
rary 0:9fb816db0c8b 358 GX = gyro[0];
rary 0:9fb816db0c8b 359 GY = gyro[1];
rary 0:9fb816db0c8b 360 GZ = gyro[2];
rary 0:9fb816db0c8b 361
rary 0:9fb816db0c8b 362 sprintf(s, "%8.3f %8.3f %6.3f %5.2f %5.2f %5.2f %5.2f %5.2f %5.2f", T, P, TP, AX, AY, AZ, GX, GY, GZ); //floatからchar*へ変換
rary 0:9fb816db0c8b 363 twe.printf("%s\r\n", s); //送信
rary 0:9fb816db0c8b 364 pc.printf("%s\r\n\r\n", s); //check用
rary 0:9fb816db0c8b 365 memset(s, '\0', 64 ); //初期化
rary 0:9fb816db0c8b 366
rary 0:9fb816db0c8b 367 gps.read_solid(GPS); //測位データ取得
rary 0:9fb816db0c8b 368 lat_north = GPS[0];
rary 0:9fb816db0c8b 369 lon_east = GPS[1];
rary 0:9fb816db0c8b 370
rary 0:9fb816db0c8b 371 if(lat_north > 20 && lat_north < 90 && lon_east > 90 && lon_east < 180) { //緯度が正常な値のときのみ送信
rary 0:9fb816db0c8b 372 twe.printf("%f,%f\r\n", lat_north, lon_east); //送信
rary 0:9fb816db0c8b 373 pc.printf("%f,%f\r\n", lat_north, lon_east); //check用
rary 0:9fb816db0c8b 374 }
rary 0:9fb816db0c8b 375 memset(GPS,'\0', 2);
rary 0:9fb816db0c8b 376 }