机上の空論主義者

-♰- 有言不実行の自身をブログ名で戒めろ -♰-

【M5stack】物理フリック入力キーボードの途中段階 ~第1弾~

こんにちは。

連休なので、書きたかった記事をたくさん書き貯めたいのですが、12時間くらい寝てしまいました。
そろそろ別の論文も書かなければならない状況です。

ということで、論文を書くのが嫌なので、電子工作フィーバータイムに突入しています。
以前紹介した、「前を向いて歩きながら入力できるデバイス」の製作途中段階として、通信無しの状態のシステムを作成しました。

ume-boshi.hatenablog.jp

人生初のM5stackを用いた開発だったので、知る人ぞ知るLovyanさんのGFXライブラリを利用いたしました。
まあ、どちらの良い点も活かせているわけではありませんが。

モノについて

12個のボタンがあるほうが左手側、3個のボタンとジョイスティックがあるほうが右手側のデバイスになる予定です。

f:id:ume-boshi:20200724064424j:plain:w300
いい写真ですね。
f:id:ume-boshi:20200724064415j:plain:h300
いい写真ですね2。

左手側には制御ピン数は7本(実質6本)、右手側には制御ピン数は5本+電源 が必要となります。



そのうち基板化したいので、回路にも起こしてみました。

f:id:ume-boshi:20200724092210p:plain
左下の四角で囲われた箇所がメインの内容です。
とりあえず現在の基板の状態を再現しましたが、joy stickのところになぜ抵抗を付けたのかわからないです。
この時の僕は何を考えて取り付けたのでしょうか。

マイコンでの処理内容

入力のために「左手側の入力ボタンを認識」と、「右手側の入力を合わせて入力文字を決定」の2つの段階を設けています。


まず、左手側の認識順序の説明を。

  1. すべての列(c1, c2, c3)の読み込む電位をHIGHにする
  2. ひとつずつ行(r1, r2, r3, r4)をdigitalReadする
  3. 行がHIGHを読み込んだ場合、どの列からの信号かを調べる分岐へ
  4. c1のみや、c2のみをHIGHにすることで、どの列かを判断
  5. 1~4の内容から、どの行列のボタンが押されていたかを特定しkey = 0~12の値で表現(入力なしの0と、1行目から1~3、2行目から4~6…)


そして、入力文字の決定の説明を。

  1. keyが0でない場合、あ行かフリックかの入力を受け付ける
  2. enterボタンが押された場合、あ行として入力確定
  3. フリック入力を4方向で取得し、い~お行として入力確定
    1. ジョイスティックの角度を取得
    2. 入力方向をうまいこと認識(ソースコード見て)
  4. わ列の場合のみ入力内容を変更
  5. keyが0であった場合、改行と空白、画面クリーンを右手側のボタンで実行
  6. 実行が連続で行われないようにif....if...........if...............



if文たっぷりのごみコードですが。
久しぶりにgithubに上げました。

github.com

プライベートリポジトリばっかり使ってるから、何もしてない人に見える。

動作例

1行だけdigiatalRead関数が利かなかったので、「まやら」行の文字は入力できなくしているのは内緒です。
あと、ジョイスティックの基板への刺さり具合が悪く、「い」が入力されてしまうのも内緒です。
あと、小文字とか記号系とかも実装していないのも内緒です。

youtu.be

おわりに

いい感じにプロトタイプができました。
ただ、これから苦手な通信周りと、やったことないAndroidアプリの開発が待ってると思うと放置しちゃいそうな予感がします。

あいみょんのANNよかった。



本記事の机上の空論:ケース作らないと基板が痛すぎて使えない