前回二乗マトリクスの実験用のキーパットを設計した。

今週はそれを印刷した。

print

意図した通りの感じになった。

今回は二乗マトリクスの実験用なので、 真面目に配線計画を考えて、その通りに実装した。

kicadで計画。

schematics

wireing

実装するとこんなかんじ。

finish

半田付けしながら動画をとったので、後で編集しよう。

ソフトウエアがちょっと困った。

いままで二乗マトリクスの時は、1からソフトを書いていたので、キーボードとして使うには敷居がたかかった。 今回はQMK Firmwareを使う事を目標にした。

理論上は、MATRIX_ROW_PINSとMATRIX_COL_PINSに同じ値を設定すれば、 あとはQMK Firmwareがうまいことやってくれるはずだった。

しかし、実際やってみたら、QMK Firmwareが起動せず、 常にブートローダが見える状態になってしまった。

いろいろやってデバッグした。

  • COL側を全部使ってないピンにしたら動く。
  • 全部といわず最初の値だけ別のにしたら動く。
  • select_row関数の中身をコメントアウトしたら動く。
  • row idとcol idが同じ時は読まないようにしたら動く。
  • row idとcol idが同じ時は読んだ後に値をすてるようにしたら動く。
  • キーが沢山押しっぱなしだと起動しない機能があるのかもと思ったが、他のキーボードではそんな事はおこらない。

どこで死んでるか、2分探索しようとしたけど、 USBのHIDコネクションが確立してないから、 標準のデバッグログは使えない。

3時間ぐらい悩んでいたが、 ふと、「何かキーを押しながら通電したら特別な事をする機能」がQMK Firmwareにあったなと思い、 マニュアルをみたら、ビンゴだった。

https://beta.docs.qmk.fm/using-qmk/hardware-features/feature_bootmagic#bootmagic-lite-id-bootmagic-lite

起動時にマトリクスの左上のキーが押されていたら、 ブートローダに逆戻りするbootmagic-liteという機能があって、 新しいキーボード用テンプレートでは最初から有効になっているみたい。

二乗マトリクスでは、常に左上から右下の対角線上のキー(がある場所)は押されている扱いになるので、 左上のキーも押されたと認識されているみたい。

BOOTMAGIC_ENABLE = no

と設定したら正常に動きだした。 オフにするより、設定で横にズラすべきかも。

これはひどい落とし穴だ。