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

