CodeLab技術ブログ

プログラミング技術まとめ

Raspberrypi2でGPIOの入力

ということで、前回に引き続き、今回はGPIOでの入力をしてみたいと思います。

今回はPORT27と3.3Vラインをタクトスイッチで接続。並列でプルダウン抵抗をつないてみました。
wiringPIで試してみましょう

# gpio -g mode 27 in ##ポート27をINモードにする
# gpio read 27

タクトスイッチを押しながらリードコマンドを発行すると1が、OFFにして発行すると0が返ってくると思います。

では、プログラムで試してみます。
今回は、PORT27のタクトスイッチが押されたら、PORT22のLEDの表示状態を変えるプログラムを書いてみます。

#include <wiringpi .h>
#define GPIO22 22
#define GPIO27 27
int main(void){
    int i;
    //初期設定
    if(wiringPiSetupGpio() == -1) return 1;

    pinMode(GPIO27,INPUT);
    pinMode(GPIO22,OUTPUT);

    while(1){
//チャタリング対策 100ms待ってONなら入力されたとみなす
        if(digitalRead(GPIO27)==0){
            continue;
        }
        delay(100);
        if(digitalRead(GPIO27)==0){
            continue;
        }
//スイッチが離されるまで待つ
        while(digitalRead(GPIO27));
//LEDの表示変更
        digitalWrite(GPIO22,!digitalRead(GPIO22));


    }
    return 0;
}

コンパイルは前回と同じです。
gcc -o test test.cpp -lwiringPi

どうでしょうか?タクトスイッチが押されるたびに、LEDが点灯・消灯を繰り返すはずです。
※チャタリング対策(スイッチが入ったり切ったりする間に、一瞬、ON/OFFが繰り返されてしまう現象)はかなり適当ですが、誤動作はなさそうです。

このように、非常に簡単に制御することが可能です。
高速なデバイスは難しいかもしれませんが、簡単なON/OFFのリード、ライトであれば十分実用に足るのではないかと思います。

コメントは受け付けていません。