質問編集履歴

1

GPSの情報の取得に問題があるとわかったので追記しました。

2020/04/11 18:00

投稿

photan
photan

スコア5

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