「誰でもわかるマイコン入門」文字列の切り分け
さて、前回はGPSから文字列データを受信して表示するところまでできました。
今日はこのデータを解析します。GPSモジュールから送られてくる文字列データは一般に、NMEAフォーマットです。このフォーマットの詳しい解説は
http://www.hiramine.com/physicalcomputing/general/gps_nmeaformat.html
などを参照してください。この文字列フォーマットを解析する便利なライブラリはたくさん出回っているのですが、いつも人さまの部品を利用していては勉強にならないので、今回は自前で作ってみます。
というのは、文字列の解析というのはプログラミングの基本中の基本です。これをマスターしないとプログラミングを勉強したことになりません。
それでは始めましょう。
まず、前回までにGpsInputという配列にNMEAフォーマットの文字列を格納しました。NMEAフォーマットはいくつかのパターンがあるのですが、先頭が$GPRMCというものだけを抽出すれば、日時、時刻、経度、緯度のすべてのデータが得られます。
そこで文字列の先頭6文字を比較して、それが$GPRMACに等しいときだけ、処理をするようにします。その時使う便利な命令が
strcmp(A, B)
これは文字列AとBを比較して等しいなら0の値を持ちます。このように値を持つ命令を関数と呼びます。ただし、例外的に値を持たない関数も存在します。
さて、この比較関数ですが、これは文字列全部を比較します。先頭のn文字だけ比較するには次の関数を使います。
strncmp(A, B, n)
したがって、先頭が$GPRMCに等しい場合だけ処理させるには、次のように記述します。
if (strncmp(GpsInput, "$GPRMC, 6) == 0) {
ここに処理を書く
}
さて、これで$GPRMCだけ抽出することができます。$GPRMCのデータフォーマットを見るとデータがカンマ(,)で区切られていることがわかります。
したがって、次の課題は、このカンマで区切れた文字列を小分けにして、次の10個の配列に収めることです。
char item1[20];
char item2[20];
char item3[20];
char item4[20];
char item5[20];
char item6[20];
char item7[20];
char item8[20];
char item9[20];
char item10[20];
| 固定リンク
コメント