では改めて。
SoftDevice v7.0.0 + nRF51 SDK v6.0.0の組み合わせで見ていこう。
といっても、動かしながら調べた方がわかりやすいと思うので、ひもとくというか、実践だな。
まずは、ボタン処理。
以前作った回路では、FeliCa Plugの搬送波検知によってLED点灯させるようになっている。
この「搬送波検知」は、ボタンのON/OFFと同じなのだ。
処理としては、こうやっている。
while (true) {
nrf_gpio_pin_write(PIN_LED, nrf_gpio_pin_read(PIN_RFDET));}
PIN_RFDET(GPIOのinput)を読んで、PIN_LED(GPIOのouput)に書き込んでいるだけだ。
これをwhileでやっているので、電気を無駄に使っていることだろう。
それに、そのままポート出力させているけど、実際にはチャタリング処理をやってやりたいところだ。
この辺りのことを、「button handling library」がやってくれそうである。
チャタリングって、debouncingっていうんですな。
GPIOTE Handlerを使えば良いらしい。TEは、Task Eventみたい。
と、nRF51 SDKのドキュメントには書いてあり、app_gpioteとかAPP_BUTTONとか書いてあるのだが・・・。
SDKのサンプルソースにあるgpiote_exampleでは、nrf_gpioteを使っている。
nrf_gpiote.hは「GPIOTE abstraction」らしい。抽象化したもの、か。
これはnRF51シリーズ内で抽象化している、ということかな。
nRF51を使うということはBLEを使うことになるし、BLEを使うということはSoftDeviceは組み込むことになる。
もうあれこれ考えず、S110限定で見ていこう。
そうやってサンプルを探すと、s110フォルダ内のものはだいたいAPP_BUTTON_INIT()を使っている。
これをまねすれば良いだろう。
まあ、やるならば、ble_app_templeteをコピーして、いるところだけ残していく方が賢いかも。
さて、まねをしてはみたものの・・・動かない。
イベントハンドラに飛んでくれない。
エラーになるわけでもないので、どこが悪いかよくわからん。
タイマがうまく動いてないんじゃないか、という気がするのだが、はてさて、どこから見ていくのが良いやら。
[追記:2014/07/07]
app_button_enable()が必要だった。
とりあえずFeliCa Plugではなく、タクトスイッチで試したところ、それでうまくいった。
nRFDETはプルアップだったのでそのまま使っていたのだが、ボタンはアクティブHIGHでつなげたので、それで安定せずに変な動きをしていたのだが、PULLDOWN指定することで意図した動きをするようになった。
そういえばSDK v6.0.0からmakefileが変わって、使うライブラリは自分でソースを追加してやらないといかん、と前に書いたけど、あれは勘違いだったな。
前からmakefileにはアプリ側で追加してやるようになっていた。
すまん、SDK...
自分メモ:
返信削除app_button_enable()を呼び出してみなさい。
あと、nAN-36を読むがよい。