Raspberry Piで電子工作(2) ボタン

次は、タクトスイッチを使用して、ボタンが押されているかを判定するプログラムを作成したいと思う。

使用する部品

タクトスイッチ

スイッチの一種で、ボタンを押すと、オンの状態、離すとオフの状態になる。

ボタンの内部を図式すると、以下のようになる。

端子がついている縦はもともと内部つながっており、横はスイッチを押すことで、接続(通電)される。

縦の列は上側と下側の2つ存在するが、どちらを用いてもよい。

製作する回路

今回は、タクトスイッチと抵抗を以下のように接続した。

ボタンは、ブレッドボード中央のスペースを利用して接続する。

5Vの電源のほかに、ボタンの状態を読み取るために、別途GPIOの端子を使用する必要がある。
ボタンがON になると、GPIO側に5Vの電流が流れるようになっている。
ボタンがOFFになると、GNDに電流が流れるようになっている。このとき、電流が流れすぎないように抵抗を挟んでいる。

ちなみに今回は、電源(赤)を下側に接続し、GND(黒)とGPIO(青)を上側に接続した。

ボタンの状態を読み取るプログラム

#include <wiringPi.h>
#include <stdio.h>
#define BUTTON 6

int main(void) {
    wiringPiSetup();
    pinMode(BUTTON, INPUT);
    
    int buttonState = 0;
    while(1) {
        buttonState = digitalRead(BUTTON);
        printf("%d\n", buttonState);
        delay(200);
    }
    return 0;
}

プログラムの説明

今回は、ボタンの情報をコンソールに出力するプログラムを作成した。

最初にBUTTONマクロを定義し、接続したピンのwPi番号を設定した。

7行目では、ボタンを接続したピンを、読み取りにモードにしている。

9行目で、変数buttonStateを用意し、0で初期化する。

次の行からは、while文で無限ループとしている。

11行目で、ボタンの状態を読み取り、変数buttonStateに代入している。

12行目で、変数buttonStateを表示している。
ボタンが押されていれば1、押されていなければ0と表示される。

最後の2msの待ちは、ボタンの読み取り間隔と、ループ文の時間を調整するためのものである。


トップページに戻る