TwiKeypadライブラリユーザーマニュアル(4)

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
目次へ  前のページへ (1) (2) (3) (4) 次のページへ
2017年05月15日 公開。

8. 複数のキーパッドを使用する方法

TwiKeypadライブラリが対応するキーパッドは、I2Cアドレスが重ならない様に設定すれば、複数のキーパッドをArduinoに接続する事ができます。ここでは、その方法について説明します。

8-1.キーパッドの配線法

複数のキーパッドを配線する場合、図20の配線図に従って、配線してください。

図20、Arduinoに複数のキーパッドを接続する時の配線図
↑ 画像をクリックすると拡大
図20、Arduinoに複数のキーパッドを接続する時の配線図

Arduinoの側の電源端子を3.3Vにつなぐか5Vにつなぐかは、使用するArduinoのI/O電圧に合わせて決めてください。

図20の様な配線をすると、各信号線を、キーパッドの数だけ分配する必要があります。写真4の様に、ブレッドボードで分配したり、信号を分配するための専用線を自作するなど、工夫してください。

写真4、配線をブレッドボードで配線を分配した例
↑ 画像をクリックすると拡大
写真4、配線をブレッドボードで配線を分配した例

なおGroveを使える場合は、写真5の様に簡単に配線を分配する事ができます。

写真5、Groveを使って配線を分配した例
↑ 画像をクリックすると拡大
写真5、Groveを使って配線を分配した例
広告

8-2.スケッチの作り方

I2Cアドレスがそれぞれ08Hと09Hの2つのキーパッドを接続し、両方のキーパッドのキーを読み取って、押されたキーをシリアルモニタ上に表示するスケッチを、リスト8に示します。このスケッチは、 Arduino IDEファイル→スケッチ例→TwiKeypad→MultiKeypadメニューを選んでも開けます。

リスト8、2つのキーパッドを使うサンプルスケッチCOPY
/*
  MultiKeypad.ino
  
  This sketch describes how to use plural keypads.
*/

// include libraries
#include <Wire.h>
#include <TwiKeypad.h>

// variables
TwiKeypad keypad1,keypad2; // keypad objects
const int TwiAdr1=8, TwiAdr2=9; // keypads' TWI(I2C) Addresses

// functions
void setup()
{
  Wire.begin();// initialize TWI as master.
  keypad1.begin(Wire,TwiAdr1); // initialize keypad1.
  keypad2.begin(Wire,TwiAdr2); // initialize keypad2.
  Serial.begin(9600); // initialize serial port at 9600bps.
  while(!Serial); // wait for serial port to connect.
  Serial.println("Press keys.");
} // setup

void loop()
{
  int8_t key;

  // keypad1
  key=keypad1.GetKey();
  if(key>=0) {
    Serial.print("Keypad1-SW");
    Serial.println(key+1);
  } // if

  // keypad2
  key=keypad2.GetKey();
  if(key>=0) {
    Serial.print("Keypad2-SW");
    Serial.println(key+1);
  } // if
} // loop

キーパッドが1つの場合は、TwiKeypad型のオブジェクト変数を1つだけ作ったのですが、2つのキーパッドを使う場合は、keypad1keypad2という2つの変数を作ります。

TwiKeypad keypad1,keypad2; // keypad objects

そして、keypad1と、keypad2を別々のI2Cアドレスで初期化します。

  keypad1.begin(Wire,TwiAdr1); // initialize keypad1.
  keypad2.begin(Wire,TwiAdr2); // initialize keypad2.

この例では、keypad1をアドレスTwiAdr1(別の行で8と宣言されている定数)で、keypad2をアドレスTwiAdr2(別の行で9と宣言されている定数)で、初期化しています。これにより、アドレス08Hのキーパッドはkeypad1というオブジェクト変数で、アドレス09Hのキーパッドはkeypad2というオブジェクト変数で、それぞれ扱えるようになります。

押されたキーを読み取るには、GetKey関数かGetChar関数を使います。リスト8の例では、GetKey関数を使っています。

WaitForKey関数とWaitForChar関数はキーが押されるまで関数から帰ってこないので、複数のキーパッドを使う時は、使用できません。1つのキーパッドの状態をWaitForKey関数やWaitForChar関数で読み取ると、そのキーパッドで何かキーが押されるまで、別のキーパッドの状態を読みに行けないからです。

  key=keypad1.GetKey();
  if(key>=0) {
    Serial.print("Keypad1-SW");
    Serial.println(key+1);
  } // if

上の処理で、アドレスが08HのキーパッドのキーをGetKey関数で読み取り、処理しています。キーが押されていれば、"Keypad1-"と押されたスイッチ番号を表示し、キーが押されていなければ、何も表示せずに次の処理に移ります。

  key=keypad2.GetKey();
  if(key>=0) {
    Serial.print("Keypad2-SW");
    Serial.println(key+1);
  } // if

上の処理で、アドレスが09HのキーパッドのキーをGetKey関数で読み取り、処理しています。キーが押されていれば、"Keypad2-"と押されたスイッチ番号を表示し、キーが押されていなければ、何も表示せずに次の処理に移ります。

参考までに、アドレス08Hのキーパッド(Keypad1)のSW6とSW11を順に押し、次にアドレス09Hのキーパッド(Keypad2)のSW2とSW14を順に押した場合のシリアルモニタの表示を、図21に示します。

図21、リスト8の実行結果の例
図21、リスト8の実行結果の例
目次へ  前のページへ (1) (2) (3) (4) 次のページへ

このページで使われている用語の解説

関連製品

I2C接続4X4キーパッド 商品名 I2C接続4X4キーパッド
税抜き小売価格 2400円
販売店 スイッチサイエンス マルツ
サポートページ
Arduino 電子工作
このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。