TouchShieldライブラリ

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
2016年09月02日 Ver. 1.00公開。
英文ページへ移動
SparkFun社のTouch Shield(タッチシールド)をArduino Unoで簡単に使うためのライブラリ
Arduino Unoに装着したTouch Shield
Arduino Unoに装着したTouch Shield

目次

1. はじめに … 1ページ
2. ダウンロード … 1ページ
3. インストールの方法 … 1ページ
4. 使い方 … 1ページ
4-1. サンプルスケッチの使い方 … 1ページ
4-2. サンプルスケッチの説明 … 1ページ
4-3. キー割り当ての変更法 … 1ページ
4-4. キーバッファについて … 1ページ
4-5. 使用上の注意点 … 1ページ

1.はじめに

SparkFunTouch Shieldは、タッチセンス式の3×3の9個のキーがあるキーパッドのシールドです。

このシールドを使う場合、ソフトをどうやって作るかが問題になります。GitHubでサンプルスケッチは公開されているのですが、このサンプルスケッチは、ライブラリの形にまとまっていませんし、また、スケッチを自分のプロジェクトに合うように書き換えようと思っても、割り込みルーチン(ISR)を書き換えなければならないなど、初心者が簡単に書き換えられる様にはなっていません。(ここら辺の話は、SparkFunのTouch Shield(タッチシールド)を使ってみた(2)に詳しく書きました)

そこで今回、Arduino UnoでTouch Shieldが簡単に使える様に、TouchShieldライブラリを作成しました。

LGPLライセンスで配布しますので、個人的な使用・商用にかかわらず無料でご利用いただけますが、再配布の際には著作者の表示に注意してください。

また、このライブラリを作るにあたって、SparkFunがGithubで配布しているサンプルスケッチの一部を利用させていただきました。

なお、このライブラリは、SparkFunとは関係なく開発した非公認のライブラリなので、万一動作に不良などがあっても、SparkFunには問い合わせないでください。

2.ダウンロード

TouchShieldは、以下のリンクよりダウンロードできます。

TouchShieldライブラリVer.1.00のダウンロード TouchShield_100.zip (6kB)

このライブラリは、Arduino Unoに対応しています。動作検証はArduino IDE 1.0.6、1.6.11、および1.7.8で行っています。

注:TouchShieldライブラリはArduino IDE 1.7.10ではうまく動作しませんが、現在原因を調査中です。

3.インストールの方法

ライブラリのインストールの方法を、Arduino IDE 1.6.11を例に説明します。

注:他のバージョンのArduino IDEではメニュー構成などが異なる事があります。

まずArduino IDEを起動し、スケッチ→ライブラリをインクルード→.ZIP形式のライブラリをインストール...メニューを選択します。(図1参照)

図1、.ZIP形式のライブラリをインストール...メニューを選択
図1、.ZIP形式のライブラリをインストール...メニューを選択

その時に開くウィンドウで、ダウンロードした.ZIPファイルを選択し、開くボタンをクリックします。(図2参照)

図2、.ZIPファイルを選択して開く
図2、.ZIPファイルを選択して開く

「ライブラリが追加されました。」というメッセージが表示されれば、ライブラリがインストールされています。

図3、インストール完了時のメッセージ
図3、インストール完了時のメッセージ

4.使い方

TouchShieldライブラリには、サンプルスケッチが付属します。そのサンプルスケッチの使い方を中心に、TouchShieldライブラリの使い方を説明します。

4-1.サンプルスケッチの使い方

まず、Touch Shieldを装着したArduino Unoを、USBケーブルでパソコンに接続してください。

次にArduino IDEを起動し、ファイル→スケッチの例→TouchShield→sampleメニューを選択します。(図4参照)

図4、サンプルスケッチを開く
↑ 画像をクリックすると拡大
図4、サンプルスケッチを開く

そうすると、リスト1の様なサンプルスケッチが開きます。

リスト1、sampleスケッチCOPY
#include <Wire.h>
#include <TouchShield.h>

TouchShield ts; // when you want to enter numbers
//TouchShield ts('A','B','C','D','E','F','G','H','I'); // when you want to enter alphabets

void setup() {
  ts.init();
  Serial.begin(9600);
  Serial.println("Ready.");
}

void loop() {
  char c=ts.read();
  if(c) {
    Serial.print(c);
  } // if
  // delay(1000); // to test key buffer functionality
}

このスケッチをArduinoに書き込んで、シリアルモニタを起動すると、"Ready."と表示されます。(図5参照)

図5、シリアルモニタを起動した時の表示
図5、シリアルモニタを起動した時の表示

この状態でTouch Shieldのキーをタッチすると、それが画面に表示されます。例えば、1、2、3のキーを順にタッチすると、図6の様になります。

図6、1、2、3のキーをタッチした時の表示
図6、1、2、3のキーをタッチした時の表示

4-2.サンプルスケッチの説明

リスト1のスケッチの説明をします。

TouchShieldスケッチを使うには、次の様に、Wire.hTouchShield.hをインクルードする必要があります。Wire.hをインクルードするのは、Touch ShieldとI2C(TWI)で通信するのにWireライブラリを使用するからです。

#include <Wire.h>
#include <TouchShield.h>

次にTouchShield型のオブジェクト変数を宣言します。ここではtsという変数名にしていますが、変数名は何でもかまいません。以後、Touch Shieldの制御は、このオブジェクト変数のメンバ関数を呼び出すことにより行います。

TouchShield ts; // when you want to enter numbers

キーパッドを使う前に、initというメンバ関数を呼び出し、Touch Shieldを初期化します。

ts.init();

キーを読み出す時には、readというメンバ関数を呼び出します。

char c=ts.read();

read関数は、タッチされたキーを表す文字を返します。例えば1のキーを押すと、'1'が返ります。何もキーが押されていない場合は、'\0'(NULLキャラクタ)が返ります。

上の例では、char型の変数cに、タッチされたキーを表す文字が代入されます。

4-3.キー割り当ての変更法

デフォルトでは、read関数は'1'から'9'までの文字を返しますが、キーの割り当てを変更する事もできます。

キー割り当てを変更する場合は、次の様にTouchShield型のオブジェクト変数を宣言する際に、割り当てたい文字をコンストラクタの引数にします。(割り当てる文字をカンマで区切り、全体を括弧でくくります)

TouchShield ts('A','B','C','D','E','F','G','H','I'); // when you want to enter alphabets

この場合は、1のキーには'A'、2のキーには'B'…といった具合に、大文字のアルファベットが割り当てられます。

4-4. キーバッファについて

TouchShieldライブラリは、16文字のキーバッファを備えています。キーをタッチしてからすぐにread関数で読めなくても、読み出すまでキーバッファにタッチしたキーの情報を記録しておきます。そのため、他の処理に時間がかかって、しばらくread関数が呼び出せない状態でも、キーの取りこぼしがありません。

キーバッファの働きを調べるには、サンプルスケッチのloop関数内のdelay関数に付いているダブルスラッシュ(//)を取ってください。

void loop() {
  char c=ts.read();
  if(c) {
    Serial.print(c);
  } // if
  delay(1000); // to test key buffer functionality
}

このdelay関数により、1秒間隔でしかread関数を呼び出せなくなりますが、キーバッファがあふれない範囲なら、連続でキーをタッチしても、取りこぼしは発生しません。

実際に試してみると、キーを連続でタッチした後に、遅れて1秒間隔で文字がシリアルモニタに表示されるのが分かると思います。

4-5.使用上の注意点

当方では動作確認までしてはいませんが、TouchShieldライブラリを使う場合、他のI2C(TWI)接続の周辺デバイスは、同時に使用できないと思います。

これは、キーがタッチされた瞬間にかかる割り込みにより、I2C経由でキーの情報を取得する仕組みになっているからです。I2Cで他のデバイスと通信している最中にキーをタッチすると、通信がぶつかってしまいます。

実際に試してはいませんが、他のデバイスとI2Cで通信している間は、Touch Shieldで使用しているINT0割り込みをマスクすると、デバイスの共存ができる可能性があります。その際、INT0割り込みをマスクする時間が長いと、キーの取りこぼしが発生するので注意が必要です。

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

関連ページ

関連製品

I/Oピン一つで読める4X4キーパッドキット 商品名 I/Oピン一つで読める4X4キーパッドキット
税抜き小売価格 900円
販売店 スイッチサイエンス
サポートページ
I/Oピン一つで読める4X5キーパッドキット 商品名 I/Oピン一つで読める4X5キーパッドキット
税抜き小売価格 2400円
販売店 スイッチサイエンス
サポートページ
I/Oピン一つで読める4X4キーパッド(完成品) 商品名 I/Oピン一つで読める4X4キーパッド(完成品)
税抜き小売価格 1380円
販売店 スイッチサイエンス
サポートページ
Arduino 電子工作
このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。