キーボードの作成 その1
豊四季 Tiny BASIC for Arduino STM32用やIchigoJamで利用出来る
小型キーボードを作成しよう思いつき、到着したタクトスイッチを調査しました。
1個 $0.66の製品を6個注文

到着したのがこれです。
回路図不明のため、テスターで調べてみると、次のような感じになっているようです。
抵抗等の部品は無く、単純な4x4のマトリックスです。
押されているボタンを判定するには、
1~4に順番に電圧を付加し、5~8の出力を読み取れば良いみたいです。
1、2,3,4が HIGH、LOW、LOW、LOW
の場合、ボタンK1~K4の状態を調べることが出来ます。
K3が押されている場合、端子7の出力はHIGHとなります。
この4x4マトリックスを4つ使って64キー(4行x16列)を仮実装してみます。
4行x16列だと端子が20ピンとなります。Arduino的にI/Oポートが足りません。
そこでシフトレジスタを2つ追加。回路的には次のような感じです。
※2017/09/05 更新 回路図を差し換えました
実装してみるとこんな感じになります。

テスト用のスケッチ
#include <Arduino.h> #define SOUT_PIN 2 // シリアルアウト #define CLK_PIN 3 // クロック #define LATCH_PIN 4 // ラッチ #define SCN1_PIN 5 // #define SCN2_PIN 6 // #define SCN3_PIN 7 // #define SCN4_PIN 8 // uint8_t lines[] = { SCN1_PIN, SCN2_PIN, SCN3_PIN, SCN4_PIN }; uint16_t scn[4]; uint8_t getKeyCode() { uint16_t clm = 0x0001; memset(scn, 0, 8); for (uint8_t i=0; i < 16; i++) { digitalWrite(LATCH_PIN, LOW); shiftOut(SOUT_PIN, CLK_PIN, LSBFIRST, ~clm & 0xff ); shiftOut(SOUT_PIN, CLK_PIN, LSBFIRST, ~(clm>>8) & 0xff ); digitalWrite(LATCH_PIN, HIGH); for (uint8_t j=0; j <4; j++) { scn[j]<<=1; scn[j] |= digitalRead(lines[j]); } clm<<=1; } } void setup() { Serial.begin(115200); pinMode(SOUT_PIN, OUTPUT); pinMode(CLK_PIN, OUTPUT); pinMode(LATCH_PIN, OUTPUT); pinMode(SCN1_PIN, INPUT_PULLUP); pinMode(SCN2_PIN, INPUT_PULLUP); pinMode(SCN3_PIN, INPUT_PULLUP); pinMode(SCN4_PIN, INPUT_PULLUP); } void bitout(uint16_t d) { uint16_t tst=0x8000; for (uint16_t i=0; i <16; i++) { Serial.write(tst&d ? '1' : '0'); tst>>=1; } Serial.println(); } void loop() { getKeyCode(); for (uint8_t i=0; i <4; i++) bitout(scn[i]); Serial.println("----"); delay(100); }
実行すると、4行16列のボタンのON/OFF状態を表示します。
1がOFF、0がONです。
取りあえず動いているようです。
次のステップとしては、
・各ボタンにスキャンコードを割当て
・PS/2キーボード インタフェース対応
・シリアル出力対応
をやってみます。
最終的には、ArduinoをPro miniまたはAtmega328単体利用にして小型化もしてみます。
« Windowsストア版 Arduino IDEを試してみる | トップページ | キーボードの作成 その2 »
「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)


コメント