ほとんどの製品にはスイッチがあります。
そのスイッチをポートに入力回路として構成する場合には、プルダウンとプルアップという方法があります。
スイッチの入力を感知する2つの方式
プルダウンとは、あらかじめグランド側と接続をしておいて、入力がない場合はLOWが、スイッチをおされて入力されると5Vが供給されHIGHとなります。
その逆、プルアップとは、あらかじめ5Vと接続しておきHIGHが供給されていて、スイッチの入力でグランド側と接続するためにLOWに変化します。
この変化をポート制御によってスイッチの入力を感知します。
そのためには、外付け部品を加えた回路を用意します。
プルアップの基本的な回路と動作
プルアップ(PULLUP)の基本的な接続方法は下記となります。
Arduino(マイコン)のポートにR(抵抗)で5Vを接続し、グランドとの間にスイッチを設けます。
こうすると、通常はスイッチがOFFの状態ですから電圧がポートにかかるためHIGH(5V)が供給されています。
スイッチが押されると、ポートはGNDと接続状態となるためLOW(0V)に変化をします。
プログラムは下記のようになります。
//入力ピンを5にした例 // void setup(){ pinMode(5,INPUT) ; } void loop(){ int val; while(1){ val = digitaRead(5); if(val==LOW){ //SWが押されたときの処理 } } }
マイコン内部にプルアップ機能をもつArduinoはプログラムでプルアップ
ところがArduinoは下記の図のようにマイコン内部にプルアップ機能を持っているため、ポートにはスイッチを接続するだけで簡単にスイッチ入力を行うことができます。
この機能を使う場合、何も特別な命令が必要なわけではなく、単純に pinModeでピンを設定するときに INPUT から INPUT_PULLUPと書くだけで実現できます。
実際のプログラムは下記のようになります。
//入力ピンを5にした例 // void setup(){ pinMode(5,INPUT_PULLUP) ; } void loop(){ int val; while(1){ val = digitaRead(5); if(val==LOW){ //SWが押されたときの処理 } } }
最後に
Arduinoのこの便利な機能は、回路を単純化するという意味では使える機能ですが、ボード上はなにも回路がないため、そのポートがいったいどんな状態なのか見た目で確認することができません。
従来どおりのプルアップ回路であれば、抵抗を通して5Vに接続されていることが確認できますから、うかつにマイコンを壊すことはありませんが、この方法は、プログラムを見ない限り判断がつきません。
製品開発後数ヶ月たつと技術者は過去の物件の詳細を忘れてしまいがちです。
2016.1.28 吉川