質問編集履歴
1
GPSの情報の取得に問題があるとわかったので追記しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -400,6 +400,142 @@
|
|
400
400
|
|
401
401
|
|
402
402
|
|
403
|
+
####追記
|
404
|
+
|
405
|
+
プログラムが止まるタイミングからgetGPS()関数が怪しいと思いコメントアウトしてみたところ、デバッグ用のシリアル通信を削除した上でバイナリデータの送信が成功しました。getGPS()関数は以下になります。
|
406
|
+
|
407
|
+
```
|
408
|
+
|
409
|
+
void getGPS() {
|
410
|
+
|
411
|
+
String line;
|
412
|
+
|
413
|
+
String s;
|
414
|
+
|
415
|
+
double LAT; //緯度
|
416
|
+
|
417
|
+
double LNG; //経度
|
418
|
+
|
419
|
+
double GS; //対地速度
|
420
|
+
|
421
|
+
|
422
|
+
|
423
|
+
GPSSerial.listen();
|
424
|
+
|
425
|
+
while (!GPSSerial.isListening());
|
426
|
+
|
427
|
+
//1つのセンテンスを読み込む
|
428
|
+
|
429
|
+
do {
|
430
|
+
|
431
|
+
String line = GPSSerial.readStringUntil('\n');
|
432
|
+
|
433
|
+
if (line != "") {
|
434
|
+
|
435
|
+
int i, index = 0, len = line.length();
|
436
|
+
|
437
|
+
String str = "";
|
438
|
+
|
439
|
+
|
440
|
+
|
441
|
+
//Stringlist生成
|
442
|
+
|
443
|
+
String list[30];
|
444
|
+
|
445
|
+
for (i = 0; i < 30; i++) {
|
446
|
+
|
447
|
+
list[i] = "";
|
448
|
+
|
449
|
+
}
|
450
|
+
|
451
|
+
|
452
|
+
|
453
|
+
//「,」を区切り文字として文字列を配列にする
|
454
|
+
|
455
|
+
for (i = 0; i < len; i++) {
|
456
|
+
|
457
|
+
if (line[i] == ',') {
|
458
|
+
|
459
|
+
list[index++] = str;
|
460
|
+
|
461
|
+
str = "";
|
462
|
+
|
463
|
+
continue;
|
464
|
+
|
465
|
+
}
|
466
|
+
|
467
|
+
str += line[i];
|
468
|
+
|
469
|
+
}
|
470
|
+
|
471
|
+
|
472
|
+
|
473
|
+
//$GPRMCセンテンスを読み込んで、緯度、経度、対地速を表示する
|
474
|
+
|
475
|
+
if (list[0] == "$GPRMC") { //素子に応じて$以下の部分を変える
|
476
|
+
|
477
|
+
if (list[2] == "A") { //GPSが測位不可でない時
|
478
|
+
|
479
|
+
//緯度
|
480
|
+
|
481
|
+
LAT = NMEA2DD(list[3].toFloat()), 6;
|
482
|
+
|
483
|
+
//経度
|
484
|
+
|
485
|
+
LNG = NMEA2DD(list[5].toFloat()), 6;
|
486
|
+
|
487
|
+
//対地速(km/h)
|
488
|
+
|
489
|
+
GS = list[7].toFloat() * 1.852; //1ノット=1.852km/h
|
490
|
+
|
491
|
+
}
|
492
|
+
|
493
|
+
s += String(LAT, 6);
|
494
|
+
|
495
|
+
s += String(LNG, 6);
|
496
|
+
|
497
|
+
s += (String)GS;
|
498
|
+
|
499
|
+
data[7] = LAT;
|
500
|
+
|
501
|
+
data[8] = LNG;
|
502
|
+
|
503
|
+
data[9] = GS;
|
504
|
+
|
505
|
+
}
|
506
|
+
|
507
|
+
}
|
508
|
+
|
509
|
+
} while (s == ""); //ちゃんと読めるまで
|
510
|
+
|
511
|
+
}
|
512
|
+
|
513
|
+
|
514
|
+
|
515
|
+
//NMEAの緯度経度を「度」(DD)の表記に変換
|
516
|
+
|
517
|
+
float NMEA2DD(float val) {
|
518
|
+
|
519
|
+
float u;
|
520
|
+
|
521
|
+
int d = val / 100;
|
522
|
+
|
523
|
+
int m = (((val / 100.0) - d) * 100.0) / 60;
|
524
|
+
|
525
|
+
float s = (((((val / 100.0) - d) * 100.0) - m) * 60) / (60 * 60);
|
526
|
+
|
527
|
+
u = d + m + s;
|
528
|
+
|
529
|
+
return u;
|
530
|
+
|
531
|
+
}
|
532
|
+
|
533
|
+
```
|
534
|
+
|
535
|
+
秋月電子通商で販売されているGPSモジュールを使用しています。通信にはソフトウェアシリアルを使用しています。
|
536
|
+
|
537
|
+
|
538
|
+
|
403
539
|
### 補足情報(FW/ツールのバージョンなど)
|
404
540
|
|
405
541
|
|