質問編集履歴
1
GPSの情報の取得に問題があるとわかったので追記しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -199,6 +199,74 @@
|
|
199
199
|
|
200
200
|
ただ、最終的には余計なデータ送信をしたくないのでこれらのデバッグ用のシリアル送信は削除したいと思っています。Serial.printlnの有無で挙動が変わるというのも不可解です。
|
201
201
|
|
202
|
+
####追記
|
203
|
+
プログラムが止まるタイミングからgetGPS()関数が怪しいと思いコメントアウトしてみたところ、デバッグ用のシリアル通信を削除した上でバイナリデータの送信が成功しました。getGPS()関数は以下になります。
|
204
|
+
```
|
205
|
+
void getGPS() {
|
206
|
+
String line;
|
207
|
+
String s;
|
208
|
+
double LAT; //緯度
|
209
|
+
double LNG; //経度
|
210
|
+
double GS; //対地速度
|
211
|
+
|
212
|
+
GPSSerial.listen();
|
213
|
+
while (!GPSSerial.isListening());
|
214
|
+
//1つのセンテンスを読み込む
|
215
|
+
do {
|
216
|
+
String line = GPSSerial.readStringUntil('\n');
|
217
|
+
if (line != "") {
|
218
|
+
int i, index = 0, len = line.length();
|
219
|
+
String str = "";
|
220
|
+
|
221
|
+
//Stringlist生成
|
222
|
+
String list[30];
|
223
|
+
for (i = 0; i < 30; i++) {
|
224
|
+
list[i] = "";
|
225
|
+
}
|
226
|
+
|
227
|
+
//「,」を区切り文字として文字列を配列にする
|
228
|
+
for (i = 0; i < len; i++) {
|
229
|
+
if (line[i] == ',') {
|
230
|
+
list[index++] = str;
|
231
|
+
str = "";
|
232
|
+
continue;
|
233
|
+
}
|
234
|
+
str += line[i];
|
235
|
+
}
|
236
|
+
|
237
|
+
//$GPRMCセンテンスを読み込んで、緯度、経度、対地速を表示する
|
238
|
+
if (list[0] == "$GPRMC") { //素子に応じて$以下の部分を変える
|
239
|
+
if (list[2] == "A") { //GPSが測位不可でない時
|
240
|
+
//緯度
|
241
|
+
LAT = NMEA2DD(list[3].toFloat()), 6;
|
242
|
+
//経度
|
243
|
+
LNG = NMEA2DD(list[5].toFloat()), 6;
|
244
|
+
//対地速(km/h)
|
245
|
+
GS = list[7].toFloat() * 1.852; //1ノット=1.852km/h
|
246
|
+
}
|
247
|
+
s += String(LAT, 6);
|
248
|
+
s += String(LNG, 6);
|
249
|
+
s += (String)GS;
|
250
|
+
data[7] = LAT;
|
251
|
+
data[8] = LNG;
|
252
|
+
data[9] = GS;
|
253
|
+
}
|
254
|
+
}
|
255
|
+
} while (s == ""); //ちゃんと読めるまで
|
256
|
+
}
|
257
|
+
|
258
|
+
//NMEAの緯度経度を「度」(DD)の表記に変換
|
259
|
+
float NMEA2DD(float val) {
|
260
|
+
float u;
|
261
|
+
int d = val / 100;
|
262
|
+
int m = (((val / 100.0) - d) * 100.0) / 60;
|
263
|
+
float s = (((((val / 100.0) - d) * 100.0) - m) * 60) / (60 * 60);
|
264
|
+
u = d + m + s;
|
265
|
+
return u;
|
266
|
+
}
|
267
|
+
```
|
268
|
+
秋月電子通商で販売されているGPSモジュールを使用しています。通信にはソフトウェアシリアルを使用しています。
|
269
|
+
|
202
270
|
### 補足情報(FW/ツールのバージョンなど)
|
203
271
|
|
204
272
|
dataAquisition()関数内のget○○の関数すべてが正常に動作することは確認されています。また、バイナリデータへ変換するRecordbuf()も正常に動作することが確認できています。
|