以前、SparkFun ジェスチャーセンサについてご紹介しました。
公開されているジェスチャーセンサのコードはC++で書かれているため、
PICマイコン用にCに書き換えて実装してみました。
ほぼ同じ処理として書き換えたにも関わらず、
readGesture関数内のwhileループに一度入ると
抜け出せなくなるという問題に遭遇してしまいました。
Googleで検索すると海外でも同じ事象に遭遇した方はいましたが、
対処法までは書かれていませんでした。
データシートの処理フローを参考にして
whileループを抜け出せるようにreadGesture関数内の
if( (gstatus & APDS9960_GVALID) == APDS9960_GVALID ) {
から
if( gstatus==3 ) {
に書き換えると一応、ループから抜け出せて動作することが分かりました。
ただ、無理にコードを書き換えているのが原因かもしれませんが、
上下左右のジェスチャは認識しますが、
Far、Nearの認識ができません。
同じような問題に遭遇して解決された方、
いらっしゃいましたら教えてください。
処理を一部変更して無理やり動作させた様子。
一応、動作はイイ感じに認識しています。
パラメータ等にそこそこシビアなようなので、
パラメータ等を変更すれば無理に書き換えなくても動作するかもしれません。
それかLED出力等のモジュール自体の個体差もあるかもしれません。
今後も引き続き原因を調査してみたいと思います。
ただ、1つ思うことはジェスチャセンサの構造や処理がいたってシンプルなので
普通の赤外線LED1つと赤外線フォトダイオード4つあれば精度はともかく、
ジェスチャセンサを自作できると思いました。
時間見つけて自作してみたいと思います。
僕は秋月で600円で買いました。
秋月で取り扱う前にある通販で購入したものなんですが、設定パラメータ等も複数あり、個体差もあるようなので個体差かもしれません。秋月のものを買って再度挑戦してみたいと思います。
いくつかタイマ等を入れたり、通信レートを下げたり等は試行しましたので。。。
ハード起因かソフト起因か切り分けできるようにデバイス等はいつも複数購入するのがよいようですね。