タクトスイッチを接続する
今度は、GPIOの入力を使ってみましょう。今回はタクトスイッチ(あるいはタクタイルスイッチ)と呼ばれるスイッチを用います。タクトスイッチはクリック感のあるスイッチで、押したときだけ回路がつながってONになります。このスイッチの状態を、GPIOのデジタル入力を使って判定してみましょう。
回路図
まずは回路図です。次のように、単にGPIOのピンとGNDの間にスイッチを接続するだけです。ここでは2番ピンを使っています。
入力回路といいながら、スイッチがあるだけで何も入力していないように見えますね。でもこれで、スイッチの状態を判定することができるのです。
プルアップ
tessel 2のGPIOピンは、outputメソッドを実行するまでのデフォルト状態のとき、内部的に3.3Vの電源と抵抗(プルアップ抵抗)で接続されています。このような接続をプルアップと呼びます。
プルアップ接続されていればスイッチがOFFのとき、GPIOには3.3Vの電源のみが入力されているので、GPIOの入力がHighということになります(厳密にはTessel 2の内部抵抗により分圧されて3.3Vより小さい値の電圧がかかります。また内部抵抗は大きな値のため、GPIOには電流は少ししか流れません)。
スイッチが押されているときは、GNDに接続されることになるので、GPIOはGNDとの電位差がなくなり電流が流れず、Low状態となります。
なお、GPIOをGNDに直結している状態では、うっかり端子をHighにしないように注意しましょう。出力がショートしてGPIOに大きな電流が流れてしまい、tessel 2の異常終了や破損の可能性があります。
スイッチの状態を表示する
ブレッドボードの実際の接続は、次のようになります。
タクトスイッチは次のように4つの端子があり、同じ側面から伸びている端子間を利用します。
押されていない状態では、端子1~2間と、3~4間のみが接続されています。押された場合は、全ての端子が接続状態となります。
では、スイッチの状態を表示してみましょう。
const tessel = require('tessel');
const pin2 = tessel.port.A.pin[2];
setInterval(function () {
pin2.read(function(error, value) { // ピン2の値を読み取る(1)
console.log(value)
});
}, 500);
readメソッドを使うと、GPIOの入力状態を読み取ることができます(1)。
このサンプルを実行すると、0.5秒ごとにコンソールに1が出力されます。そして、タクトスイッチを押すと、今度は押している間だけ0が表示されます。つまり、スイッチがOFFのときはGPIOがHigh、スイッチがONのときはLowになるということです。
割り込み(interrupt)
前述したように、GPIOの2番ピンは割り込み(interrupt)用の入力端子として利用できます。割り込みとは、非同期に発生するイベントを検知する仕組みのことです。この割り込みを使うと、GPIOの入力値の変化を非同期に処理することができます。
先ほどのサンプルでは、setIntervalのループで定期的にGPIOの入力値をチェックしていました。今度は割り込みを使ってみましょう。次のサンプルを実行すると、ボタンを押したり離したりしたときだけ、0か1の値が表示されるようになります。
const tessel = require('tessel');
const pin2 = tessel.port.A.pin[2];
pin2.on('change', function(v) { // 割り込みのコールバック定義(1)
console.log(v)
});
onメソッドで、割り込みのイベントが発生した場合のコールバックを定義しています(1)。なお、onメソッドで定義できるイベントは次のようになります。
| イベント | 状態 |
|---|---|
| change | 入力値が変化したとき |
| rise | 入力値が上昇したとき |
| fall | 入力値が下降したとき |
スイッチONでLEDを点灯する
最後に、スイッチONでLEDを点灯するコードを書いてみましょう。
const tessel = require('tessel');
const pin = tessel.port.A.pin[0];
const pin2 = tessel.port.A.pin[2];
pin.output(0);
pin2.on('rise', function(v) { // riseイベントの定義(1)
pin.output(1);
});
riseイベントの際に、GPIOの0番をHighにしています(1)。実行しても最初はLEDは点灯していませんが、スイッチを押すと点灯します。
最後に
今回は、Tessel 2にLEDとスイッチを接続してみました。次回は光センサーを接続して、アナログ入力を利用した回路を紹介する予定です。
