2015-08-10 11:49 | カテゴリ:PIC応用回路
ポータブルGPS(追加)

ヨドバシカメラさんから、プラモデル用の塗料が届くまで、GPSのソフトを改良していました。

気になっていた、GPSが出力する日時の件です。
基準が、グリニッジ標準時間なので、日本では+9時間の差が生じます。
実用上、非常に不便です。
そこで、GPS信号の出力する時間に+9時間するプログラムを追加しました。

GPSの信号はすべてアスキー文字コードで出力されます。
時間もそうです。
したがって、9時間を加算すると言っても、一旦、文字データを数字データに変換し、加算、判定をした後に、もう一度アスキー文字に変換して、表示するという作業が必要です。

マイクロチップ社のXC8には、文字データを整数に変換したり、その逆をしてくれる便利な関数が用意されています。

int Hour;
char moji[3];

Hour = atoi (moji)

ここで、Hourは整数の変数、mojiは文字配列とします。

また、逆は、

itoa (moji, Hour, 10)

ここで、mojiは文字配列、Hourは変換後に文字数字を整数にして格納する変数、10は、10進数を示します。
これを16にすれば16進数で文字表示されます。

と言うわけで、面倒な処理をするプログラムを追加しました。

深夜0時をまたぐときに日付がちゃんと変わることを確認しようと夜中に見ていると、、、

上手くありません。
日付の表示が正しくありません。

プログラムを確認しましたが、特に問題は無いようです。
それで、上記の文字列<->整数変換関数を良く見ると、整数が一桁の場合は、当然ですが、1とか2で文字が返されます。
二桁だと、10とか11です。
あー、これでした。
私は、一桁の場合は01とか02で返されると考えてプログラムしていましたので、ここが不正でした。
そこで、時間、日付や月など、一桁の場合と二桁の場合を判断して、桁揃えを処理する部分を追加したら、良いはずです。

夜中や、月末、年末を待ってテストするわけにも行かないので、プログラムに細工して、日付の変わり目、月末、年末を越える際のテストも行って、無事動作を確認しました。

DSC01163.jpg

日付、時刻は、日本の時間を表示しています。

DSC01166.jpg

ついでに、海抜、124mほどです。
Googleでは、118mですが、マンションの2階ですので、こんなものでしょう。

DSC01165.jpg

北緯、東経の表示も出ています。



めでたし、めでたし!






管理者のみに表示する