自作キーボードで使われるキーマトリクスの話を書こうとしたが、もうちょっと基礎的な話も書いてみた。
普通のスイッチ1個をデジタル入力する場合。下図のような回路で,Vccに繋げばDIはHighとなり,GNDに繋げばDIはLowとなる。
ただ,こういうスイッチは値段が高かったりサイズが大きくなったりするので,普通はオン・オフのみのスイッチを使う。その場合,もし,こんなん↓とか
こんなふうに↓
つないでしまうと,スイッチがオンのときはよいが,オフのとき,線がどこにもつながっていない状態となり,電圧が不確定(静電気や電磁波などで簡単に変わってしまう状態)になる。そこで,↓のように,
スイッチオフのときには抵抗を介してGNDにつながるようにしておく。そうすれば,もし抵抗の両端に電位差があっても,一瞬だけわずかに電流が流れてすぐにGNDと同じ電位になるので,DIは安定してLowとなる。このようにGNDにつなぐための抵抗をプルダウン抵抗といい,こんな回路にすることをプルダウンする,という。このプルダウン抵抗は,スイッチオンのとき電流が流れて無駄に電力を消費してしまうのを抑えるため,大きめの抵抗にしておく。この回路だと,スイッチオンのときがHigh,スイッチオフのときがLowとなる(アクティブハイという)。
同様に,下図のようにしても良い。
スイッチオフのときはプルアップ抵抗を介してVccにつながる。この回路だと,スイッチオンのときがLow,スイッチオフのときがHighとなる(アクティブローという)。
Pro MicroなどのArduino系マイコンでは、プルアップ抵抗が内蔵されており(内部プルアップ),それを使えばスイッチをGNDに繋ぐだけでDIができる。
Arduino IDEでプログラムするなら、以下のように書けば良い。
pinMode(ピン番号, INPUT_PULLUP);