Mono Netflix専用キーボード を Digistump で作る (その2)

最終更新日

前回の続き。

Mono Netflix専用キーボード を Digistump で作る (その1)

Mono Netflix専用キーボード を Digistump で作る (その1)

2021.08.09

プログラム

10年以上、ほぼ使っていなかった Digistump
今回も、思い知る、その容量の小ささ。

最初はお手軽に、Pimoroni で購入した I2C で繋げる光るロータリーエンコーダーを利用しようとしたが、Arduino用のseesawライブラリを組み込むと、6Kbytesを越えてしまい、メモリが足りない。

RPi Pico でロータリーエンコード(I2C) を試す

RPi Pico でロータリーエンコード(I2C) を試す

2021.06.12

しょうがないので、ロータリーエンコーダーの動作を検知するプログラムを自作する。

GPIO の INPUT_PULLUP

まず、なぜか。いやまあわかるけど、 P1 が INPUT PULLUP として利用できなかった。
本体上のLEDと同期しているので、無理目ではあるけど、 できない という記述を見つけられないので、正し仕様はわからず。

SWITCH ASWITCH B の INPUT PULLUP には、 PINP0P2 を利用する。

ロータリーエンコーダーの回転検出

ロータリーエンコーダーは、2つのスイッチのON/OFFの組み合わせで、回転方向を検出することができる。

実際には、4回の状態変化を検出できる。

時間経過 SWITCH A SWITCH B
t0 OFF OFF
t1 ON OFF
t2 ON ON
t3 OFF ON
t4 OFF OFF

t0 から t4 までの時間経過は、 カチ っと1メモリ動かす時間なので、数百msec くらい。

  • t1 SWITCH A が先に ON になり、ちょっと遅れて SWITCH BON
  • t3 SWITCH A が先に OFF になり、ちょっと遅れて SWITCH BOFF

逆回転では、SWITCH B が先に変化する。

最初は、 t0->t1 になるところで回転方向を取得していたがうまくいかない。
DEBUGをいれてみると、 t1 のタイミングがとれてない。
どうやら、 t4 直後に USBのキーボードとしてキー入力を送信するコストで t1 が間に合わず、検出漏れしてる感じ。

ということで、 t3->t4 のタイミングで回転方向を検知するようにした。

プッシュスイッチ

これは簡単、シンプルな、PULLUPスイッチ。
が、モデルによっては、 PIN P5 が使えないこともあるらしい。

自分の使った Digistump 初号機では、 P5 も正しく動作した。

code

3D データ

ケースと合うように、ペットボトルキャップのデータは、数mm くらい低くなるように修正した。

シェアする