アナログ入力を使った16ボタン入力
以前自作したアナログ入力を使ったボタン入力と同様のキーパッドが
Aliexpressで安価に販売されているので入手しました。
GND、VCC、アナログ入力の3ピンで簡単に16ボタン入力が実装出来ます。
Button Keypad module 4x4. One analog out. Simple connection to Compatible for Arduino, Raspberry, STM.

ついでに3x4タイプも入手
Button Keypad 3x4 module. One analog out. Compatible for Arduino, Raspberry, STM.

到着した製品
意外としっかりとした製品です。
透明キャップを外してボタンにラベルを付けることが出来ます。
マニュアルは無いのですが、裏に10ビット解像度時のアナログ入力値が記載されています。
この情報を元に、豊四季タイニーBASIC for micro:bitにて動作確認してみました。
動作確認プログラム
10 'Keypad 4x4
20 @(10)=1013,920,840,780,670,630,590,560,502,477,455,435,400,320,267,228
30 G0=G
40 G=GRADE(ANA(1),10,16)
50 IF G>=0 ?"KEY=[";G+1;"]":MSG TOP,0,CHR$(65+G)
60 GOTO 30
ボタンの判定は誤差と揺らぎを考慮し、裏面の値の10を引いた値で判定しています。
GRADE() 関数は配列に格納された値を閾値として等級判定する関数です。
第1引数には、判定する値、第2引数には配列先頭番号、第3引数にはデータ数を指定します。
アナログ入力ANA(1)の値が1013以上の場合は0、920以上の場合は1..と判定します。
範囲外の場合は-1を返します。
比例関係に無い値を等級判定する場合に利用するとプログラムを短く出来ます。
押した番号をコンソールに表示し、ボタン1~16をA~PとしてLEDマトリックスに表示させます。
とりあえず、動作しました。
ログを見ると、ボタン[1]を押したのに、一瞬ボタン[6]と判定されています。

このチャタリングに対する誤動作防止にはいくつか方法があります。
今回は、
ChaNさんの 「テクニカル ノート チャタリング対策のしかた」
が大変参考になりました。
ChaNさんの対策案でプログラムで対応できる「ディレイ方式」が一番簡単そうです。
さっそく試してもました。
対策
まず、測定波形を見ると1回あたりのチャタリングの幅は0.4msec(マス1msec幅)程度です。
そこで、アナログ値の測定のよるボタン判定において、
「前回の値と今回の値が異なる場合、今回の値を捨て1msec後にもう一度測定する、
同じなら値として採用する」
という対策を施したところ、誤判定を無くすことが出来ました。
う~ん、なかなかいい感じで利用できるようになりました。
修正対応したプログラム
10 'Keypad 4x4
20 G0=-1
30 @(10)=1013,920,840,780,670,630,590,560,502,477,455,435,400,320,267,228
40 G0=G
50 G=GRADE(ANA(1),10,16)
60 IF G<>G0 WAIT 1 GOTO 40
70 IF G>=0 ?"KEY=[";G+1;"]":MSG TOP,0,CHR$(65+G)
80 GOTO 40
さて、以前自作したキーパッドをIchigoJamで利用した時には、チャタリングによる
誤判定は気になりませんでした。なぜでしょう?
この理由としては、IchigoJamの処理速度が遅いため、チャタリングによる変化を
検知出来なかったのだと思われます。
今回試したmicro:bitの豊四季Tiny BASICは、ARM的にはIchigoJamと同スペックですが、
実装上の工夫により、IchigoJamより余裕で15~30倍の処理能力があります。
Arduino UNOでこのボードの利用する場合も、何らかのチャタリング対策は必要と思います。
« 豊四季Tiny BASIC for micro:bit をV0.05に更新しました | トップページ | micro:bitをArduino環境で使う (6) PPIを使った単音出力 »
「日記・コラム・つぶやき」カテゴリの記事
- 明けましておめでとうございます(2026.01.01)
- 2025年も本日で最後となりました(2025.12.31)
- ブラザー製 レザープリンター HL-L3240CDWを購入しました(2025.09.20)
- たまちゃん16歳になりました(2025.08.03)
- たまちゃんへの暑さ対策(2025.07.22)
「arduino」カテゴリの記事
- Freenove Mecanum ホイール カー キットを購入しました(2025.05.28)
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Zorin OSでArduino Uno互換機(CH340)が認識しない(2025.01.19)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- Arduino用 SKK日本語変換ライブラリの開発 その1(2024.12.28)
「ARM」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- PocketGoで遊んでみる(1)(2020.03.24)
- Arduino用 MML文演奏ライブラリの作成 その1(2019.04.01)
- BluePillボードで4桁7セグLEDの制御(2019.03.21)
「micro:bit」カテゴリの記事
- 豊四季Tiny Basic for micro:bit のマニュアルを更新しました(2020.11.21)
- micro:bitで8x8ドットNeopixelを使ったメッセージ表示(2018.05.15)
- 豊四季Tiny BASIC for micro:bit をV0.08に更新しました(2018.05.14)
- micro:bitをArduino環境で使う (7) シリアル通信(2018.02.07)
- 豊四季Tiny BASIC for micro:bit をV0.07に更新しました(2018.02.04)
« 豊四季Tiny BASIC for micro:bit をV0.05に更新しました | トップページ | micro:bitをArduino環境で使う (6) PPIを使った単音出力 »

コメント