Raspberry PiでIoTなシステム開発:WiringPiはプログラムを終了させてもピンモードがそのままになるのでシグナルを捕捉してINPUTに戻す

Posted on Posted in 趣味的なIT・ネットの話題

WiringPiを使ってトーンやPWMを扱っていると、プログラムが終了した後も、GPIOがハイのままになっていることがありました。マイコン開発の感覚からすると違和感がありますが、汎用OS上で開発していると、GPIOの設定はそのままになるのが自然な流れのようですね。

ただこれだと接続した先の回路が導通したままになり、LED点きっぱなし、モーター回りっぱなし、インダクタチャージしっぱなしになります。アウトになっているとちょっとしたことでショートさせてしまいそうで怖いです。それでは気持ち悪いので、プログラムの終了時に自動的にIOをインプットに戻すべく、シグナルの捕捉を実装します。

参考にしたのはこちら。

シグナル処理関数(シグナルハンドラ)を登録する | C言語入門講座

最後のあたりがシグナルに対応する処理の部分です。ハンドラが呼び出されるときにシグナル種別が分かるのに最初に捕捉するシグナルを指定する必要性が今ひとつ分かりませんが、これで正常に動作しました。このロジックを入れていないときは、プログラムの終了時にピン7がアウトになったままです。

一方、こちらはシグナルを捕捉したもの。INになっているのが分かります。

 

 

 


Facebooktwittergoogle_pluspinterestlinkedinmail
納得したらすぐにシェア!