フォト
2018年11月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
無料ブログはココログ

« Windowsストア版 Arduino IDEを試してみる | トップページ | キーボードの作成 その2 »

2017年8月30日 (水)

キーボードの作成 その1

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

1個 $0.66の製品を6個注文

03

到着したのがこれです。

Dscn6929

回路図不明のため、テスターで調べてみると、次のような感じになっているようです。
抵抗等の部品は無く、単純な4x4のマトリックスです。
04

押されているボタンを判定するには、
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 更新 回路図を差し換えました

01_2

実装してみるとこんな感じになります。

Dscn6928

テスト用のスケッチ

#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です。

02

取りあえず動いているようです。

次のステップとしては、
・各ボタンにスキャンコードを割当て
・PS/2キーボード インタフェース対応
・シリアル出力対応
をやってみます。

最終的には、ArduinoをPro miniまたはAtmega328単体利用にして小型化もしてみます。

« Windowsストア版 Arduino IDEを試してみる | トップページ | キーボードの作成 その2 »

arduino」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/65730424

この記事へのトラックバック一覧です: キーボードの作成 その1:

« Windowsストア版 Arduino IDEを試してみる | トップページ | キーボードの作成 その2 »