Arduino IDEでは、デジタルピンのモードを設定する際に、INPUT
、INPUT_PULLUP
、OUTPUT
の3つのモードを使用します。それぞれのモードは、デジタルピンの役割と動作に違いがあります。これらの違いについて詳しく説明します。
INPUT、INPUT_PULLUP、OUTPUTモード
1. INPUT
- 役割: ピンを入力モードに設定します。このモードでは、ピンは外部からの信号を受け取るためのものです。
- 動作: ピンは高インピーダンス状態になります。これにより、ピンは外部信号を「読む」だけで、内部からは電流を供給しません。
- 内部プルアップ/プルダウン抵抗: このモードでは、内部のプルアップ抵抗やプルダウン抵抗は接続されていません。外部で接続する必要があります。
使用例
void setup() {
pinMode(7, INPUT); // デジタルピン7を入力モードに設定
}
void loop() {
int buttonState = digitalRead(7); // ピン7からの入力値を読み取る
if (buttonState == HIGH) {
// ボタンが押された場合の処理
}
}
2. INPUT_PULLUP
- 役割: ピンを入力モードに設定し、内部プルアップ抵抗を有効にします。このモードでは、ピンの状態が浮動状態(フローティング)であることを防ぎ、安定した入力を得ることができます。
- 動作: ピンに内部プルアップ抵抗が接続されるため、ピンが接続されていないとき(オープン状態)でも、ピンは
HIGH
に引き上げられます。外部のスイッチなどでピンがGNDに接続されると、LOW
に変わります。 - 内部プルアップ抵抗: 約20kΩから50kΩの範囲で、内部に接続されています。これにより、外部のプルアップ抵抗が不要になります。
使用例
void setup() {
pinMode(7, INPUT_PULLUP); // デジタルピン7を入力モードにし、内部プルアップ抵抗を有効にする
}
void loop() {
int buttonState = digitalRead(7); // ピン7からの入力値を読み取る
if (buttonState == LOW) {
// スイッチが押された場合の処理
}
}
3. OUTPUT
- 役割: ピンを出力モードに設定します。このモードでは、ピンは外部デバイスに信号を送るために使用されます。
- 動作: ピンは出力状態になり、
HIGH
またはLOW
のいずれかの電圧レベルを設定できます。内部でプルアップ/プルダウン抵抗は影響しません。 - 内部プルアップ/プルダウン抵抗: 出力モードでは、内部プルアップ/プルダウン抵抗の影響を受けません。ピンは外部デバイスに電圧を供給する役割を果たします。
使用例
void setup() {
pinMode(7, OUTPUT); // デジタルピン7を出力モードに設定
}
void loop() {
digitalWrite(7, HIGH); // ピン7にHIGH信号を出力(LEDを点灯)
delay(1000); // 1秒待つ
digitalWrite(7, LOW); // ピン7にLOW信号を出力(LEDを消灯)
delay(1000); // 1秒待つ
}
INPUT vs INPUT_PULLUP
INPUT
: 外部でプルアップまたはプルダウン抵抗を使う必要があります。外部のスイッチやセンサーが接続される場合、信号が安定しないと「浮動状態」になる可能性があります。INPUT_PULLUP
: 内部プルアップ抵抗を使うため、外部で追加のプルアップ抵抗を用意する必要がありません。通常、スイッチやボタンの状態を安定して読み取るために使用します。スイッチが接続されていないときはHIGH
、接続されるとLOW
になるため、シンプルな接続で使えます。
OUTPUT vs INPUT
OUTPUT
: 外部デバイスに対して信号を送るために使用します。LEDやモーターなどを制御する場合に使います。ピンは常に出力状態で、内部プルアップ/プルダウン抵抗は影響しません。INPUT
: 外部からの信号を受け取るために使用します。センサーやスイッチの状態を読み取る場合に使います。内部プルアップ/プルダウン抵抗が有効になっていないため、外部での抵抗設定が必要です。
まとめ
INPUT
: 外部信号の読み取り用。浮動状態を防ぐために外部で抵抗が必要。INPUT_PULLUP
: 外部信号の読み取り用。内部でプルアップ抵抗が有効になり、接続されていないとHIGH
、接続されるとLOW
になる。OUTPUT
: 外部デバイスへの信号出力用。ピンはHIGH
またはLOW
の状態に設定される。
これらのモードを理解し、適切に使い分けることで、Arduinoのデジタルピンを効果的に活用できます。
補足
通常のスイッチを使う場合、INPUT_PULLUP
を利用するのは一般的であり、多くのケースで推奨されます。以下の理由から、INPUT_PULLUP
が一般的に選ばれる理由を説明します。
INPUT_PULLUPの利点
- 内部プルアップ抵抗の利用:
INPUT_PULLUP
モードを使用すると、Arduino内部のプルアップ抵抗が自動的に接続されます。これにより、スイッチが接続されていない(オープン状態)のときはピンがHIGH
に維持され、スイッチが押されるとピンがLOW
に変わります。- 外部でプルアップ抵抗を用意する必要がなく、回路が簡素化されます。
- 回路設計の簡素化:
- 内部プルアップ抵抗を使用することで、回路設計が簡単になります。スイッチとピンの間に抵抗を追加する必要がなく、設計がシンプルになります。
- ノイズ耐性:
- プルアップ抵抗を使用することで、入力ピンが浮動状態(フローティング)になるのを防ぎ、ノイズによる誤動作を防ぎます。
- 安定した入力信号:
- スイッチが押されていないときにピンが
HIGH
に維持されるため、安定した信号が得られます。これにより、スイッチの状態をより正確に読み取ることができます。
- スイッチが押されていないときにピンが
INPUTモードのケース
- 外部プルアップ/プルダウン抵抗が必要:
INPUT
モードを選ぶ場合は、外部でプルアップまたはプルダウン抵抗を設定する必要があります。これにより、スイッチが接続されていない状態(オープン状態)のときにピンの状態が不安定になる可能性があります。 - 特定の要件がある場合: 特定の回路設計や、プルダウン抵抗を使用する必要がある場合には
INPUT
モードを選ぶこともあります。例えば、外部で明確にプルダウン抵抗を使用する場合や、特定の回路要件がある場合です。
OUTPUTモードのケース
- スイッチを出力として使用する場合: スイッチを入力ではなく、出力として使用する場合(例えば、スイッチがON/OFFを制御する場合)には、
OUTPUT
モードを使用します。通常、スイッチの状態を読み取る際にはINPUT
またはINPUT_PULLUP
モードを使用しますが、スイッチの動作を制御する場合にはOUTPUT
モードが適切です。
さらにまとめ
- 一般的なスイッチ使用時: スイッチを読み取る場合、特に外部でプルアップ抵抗を用意する必要がなく、簡単に安定した信号を得たい場合は、
INPUT_PULLUP
が一般的に推奨されます。 - 特定の回路設計:
INPUT
モードを使用する場合は、外部でプルアップまたはプルダウン抵抗を設定する必要がある場合です。
したがって、特別な理由がない限り、INPUT_PULLUP
モードを利用するのが最も簡単で信頼性の高い選択です。
コメント