1. はじめに
あいさつ
ひょんなことからArduinoを使って遊ぶことになったので
その備忘録としてまとめていこうかと。
の第三回です。
第一回
第二回
今回の内容
今回は、第二回の延長でGPSデータが有効な状態のときに、必要な情報だけ抜き出すということをやります。
参考ページ
前回とだいたいいっしょです。
2. GPSから取得するデータについて
データフォーマット
下記の例のような感じでデータが並ぶ。
先頭の文字列がIDとなってそれによってデータの形式が変わる。
\$GPGGA, \$GPGSA, \$GPGSV, \$SPRMCなど。
詳細はデータシートや参考ページをみてください。
(例)
\$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>,*<13>
データの有効性
$GPRMCの二番目の領域のデータが、Aならば有効なデータである。
位置情報
$GPGGAから取得する。
3. スケッチ(プログラム)
参考ページ3を元に作成。
githubにあげました。
説明
- sGps.read()
- ソフトウェアシリアルポートから1文字読み取ります。
- http://www.musashinodenpa.com/arduino/ref/index.php?f=1&pos=190
- getLine(char* buf)
- 自作の関数
- bufにgpsからの情報1行分を格納する。
- sGps.read()で一文字位ずつぶち込む。
- analyzeData(char* buf)
- 自作の関数
- gpsデータ1行分のbufデータを分析する
- まず、データの有効性の確認をし、無効だったら何もしない。
- 有効の場合、$GPGGAだった場合、時間・緯度・南北・経度・東西の情報を抜き出し、シリアルモニタに出力
動作
下記みたいな出力がされます。
VやAは有効無効の確認用のログ出力
V
V
A
Time = 084623.005 : Latitude = N - 1234.1234 : Longitude = E - 12345.1234
A
Time = 084624.006 : Latitude = N - 1234.1234 : Longitude = E - 12345.1234