2015年05月04日

ジェスチャーセンサの途中経過

以前、SparkFun ジェスチャーセンサについてご紹介しました。


公開されているジェスチャーセンサのコードはC++で書かれているため、
PICマイコン用にCに書き換えて実装してみました。


ほぼ同じ処理として書き換えたにも関わらず、
readGesture関数内のwhileループに一度入ると
抜け出せなくなるという問題に遭遇してしまいました。


Googleで検索すると海外でも同じ事象に遭遇した方はいましたが、
対処法までは書かれていませんでした。


データシートの処理フローを参考にして
whileループを抜け出せるようにreadGesture関数内の
 if( (gstatus & APDS9960_GVALID) == APDS9960_GVALID ) {
から
if( gstatus==3 ) {
に書き換えると一応、ループから抜け出せて動作することが分かりました。



ただ、無理にコードを書き換えているのが原因かもしれませんが、
上下左右のジェスチャは認識しますが、
Far、Nearの認識ができません。

同じような問題に遭遇して解決された方、
いらっしゃいましたら教えてください。


gesturetest1.jpg
処理を一部変更して無理やり動作させた様子。
一応、動作はイイ感じに認識しています。


パラメータ等にそこそこシビアなようなので、
パラメータ等を変更すれば無理に書き換えなくても動作するかもしれません。
それかLED出力等のモジュール自体の個体差もあるかもしれません。

今後も引き続き原因を調査してみたいと思います。




ただ、1つ思うことはジェスチャセンサの構造や処理がいたってシンプルなので
普通の赤外線LED1つと赤外線フォトダイオード4つあれば精度はともかく、
ジェスチャセンサを自作できると思いました。

時間見つけて自作してみたいと思います。
posted by Crescent at 00:00| Comment(4) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
APDS9960を検索していてこちらにたどり着きました。gstatus==3 という事はFIFOがオーバフローするまでデータ取り続けてるわけですね。僕はForthで書いてますがその部分はGSTATUSが0になるまでマイコンのメモリバッファにコピーしてから方向判定してます。大体2,3回コピーしたらGSTATUSは0になります。detasetは大体20前後です。手をゆっくり動かすとFIFOがオーバフローします。GSTATUSが0にならないというのはチップの不良とかではないのですか?
僕は秋月で600円で買いました。
Posted by caskaz at 2015年10月27日 11:32
やはり普通に動くんですね。
秋月で取り扱う前にある通販で購入したものなんですが、設定パラメータ等も複数あり、個体差もあるようなので個体差かもしれません。秋月のものを買って再度挑戦してみたいと思います。
Posted by Crescent at 2015年10月27日 22:01
FIFOデータ読みだしてもGVALIDビットが0にならないのは不良品としかおもえません。ひょっとしてFIFOデータの読み出しが早すぎるとGVALIDビットをクリアできないなんて仕様なんてね、ArduinoはC++だけどあれってそんなに早いコード生成されるんでしょうか。Forthはそんなに早くないと思います。
Posted by caskaz at 2015年10月28日 08:52
処理速度ではないと思います。
いくつかタイマ等を入れたり、通信レートを下げたり等は試行しましたので。。。
ハード起因かソフト起因か切り分けできるようにデバイス等はいつも複数購入するのがよいようですね。
Posted by Crescent at 2015年10月28日 21:09
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック