2013年02月10日

DPC-100・コンパス機能の検証

 この記事も含めて、まとめはこちらLink


 先日、iPhoneのポケコンアプリ、DPC-100の命令で、方角を取得する「COMPASS()」を使ったプログラムを作ったけど、使っていて色々な事が分かったというか、色々と工夫が必要なので、私のメモ書きとして書いておこうと思う。

 まずはこのリスト。

20130210-02.jpg
110 LOCATION(1)
120 WHILE 1
130 C1=COMPASS(0)
140 PRINTF("COMPASS:%d",C1)
150 WEND
 単純に「COMPASS(0)」で方位を表示するもので、本体上を北に向けると0、右回りに0〜359の数値が得られる。
 これを、ゲームなどで左右に動かした角度として取得したい場合、一工夫必要。

20130210-03.jpg
110 LOCATION(1)
120 C1=COMPASS(0)
130 WHILE 1
140 C2=COMPASS(0)
150 C3=C2-C1
160 PRINTF("C2:%d C3:%d",C2,C3)
170 WEND
 ここでの表示は、C2が実際の方位、C3が計算によって取得した角度。
 ループする前に一度、コンパスの数値を取得してC1に入れ、ループ中はその差を求めれば、右回転でプラス、左でマイナスの数値が得られる。
 ただしここでの問題は2点。

  • プログラム開始直後はコンパスの数値がおかしい
 iPhoneの位置情報サービス取得命令「LOCATION(1)」を実行した直後は正常に取得できなくて、私のiPhone4では2秒ほど待たないと数値がおかしくなる。
 これは本体やiOSに依存するはずなので、5などではどうなるのか不明。

  • 北をまたぐ時、数値が359〜0に変化する
 例えばコンパス350の位置で始めた場合、右に10度回した時点でC2は0、C3は-350とおかしな数値になってしまう。

 理想は開始時が0、最小-180〜最大180の数値だが、これらを解決するため、更に一工夫したのがこれ。
110 LOCATION(1)
120 WAIT(2.0,0)
130 C1=COMPASS(0)
140 WHILE 1
150 C2=COMPASS(0)
160 C3=C2-C1
170 C3+=(C3<-180)*360
180 C3-=(C3>180)*360
190 PRINTF("C2:%d C3:%d",C2,C3)
200 WEND
 まず、LOCATION(1)の命令の後、WAITを使って2秒待ってから取得すると安定した。

 360度をまたぐものは、C3が-180を切るなら360足して、180を越えるなら-360引く。
 要は360をまたぐのは、「1周と○○度」と桁が上下するようなもので、その桁を元に戻す処理を追加すればいい。
 これで開始時の方位を基準に、-180〜0〜180の範囲で数値を取得できる。

 と言う事で、コンパスを使ったプログラムを作る方は、ご参考まで。



タグ:DPC-100 iPhone

posted by 司隆 at 14:46 | Comment(2) | Computer
この記事へのコメント
iPhoneの位置情報サービス取得命令「LOCATION(1)」を実行した直後は正常に取得できなくて、私のiPhone4では2秒ほど待たないと数値がおかしくなる。
 これは本体やiOSに依存するはずなので、5などではどうなるのか不明。



>>>iPhone4SもiPhone5も同じでした。
Posted by さく at 2013年02月28日 21:34
なるほど、機種は違ってもGPS機能としては同じなのですね。
Posted by 司 隆 at 2013年03月03日 11:22
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。