ということで、前回に引き続き、今回は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のリード、ライトであれば十分実用に足るのではないかと思います。