説明
定数とは、Arduinoの言語であらかじめ定義された表現です。プログラムを読みやすくするために使用されます。ここでは、定数をグループに分けて説明します。
論理的レベルの定義:真と偽(ブール定数)
Arduinoの言語では、真と偽を表すために、trueとfalseの2つの定数があります。
false
falseは0(ゼロ)と定義されており、これは偽を表します。
この2つのうちでは定義が簡単です。
true
trueはよく「1」と定義されると言われており、これは真を表します。
ですが、trueにはもっと広い定義があります。ブール式の意味では、0ではない整数はすべてtrueです。つまり、-1も2も-200も、ブーリアンの意味では真と定義されます。
なお、HIGH、LOW、INPUT、OUTPUTと異なり、trueとfalseの定数は小文字で入力されます。
ピンレベルの定義。HIGHとLOW
デジタルピンを読み書きする場合、ピンが取り得る/設定できる値は2つしかありません。HIGHとLOWです。
HIGH
ピンに対するHIGHの意味は、ピンがINPUTに設定されているか、OUTPUTに設定されているかによって多少異なります。pinMode()でピンをINPUTに設定し、digitalRead()で読み取った場合、Arduino(ATmega)は以下の場合にHIGHを報告します。
・ピンに3.0V以上の電圧がかかっている場合(5Vボードの場合)
・ピンに2.0V以上の電圧がかかっている場合(3.3V系ボード)
ピンは、pinMode()でINPUTとして設定し、digitalWrite()でHIGHにすることもできます。これにより、内部の20Kプルアップ抵抗が有効になり、外部の回路でプルダウンされない限り、入力ピンがハイレベルに引き上げられます。これは、ピンモード()関数の引数にINPUT_PULLUPを渡すことでも実現できます。詳しくは「デジタルピンのモードの定義」で説明します。
pinMode()でピンをOUTPUTに設定し、digitalWrite()でHIGHに設定した場合、ピンは以下の状態になります。
・5ボルト (5Vボード)
・3.3ボルト (3.3Vボード)
この状態では、電流を供給することができます。例えば、グランドに直列抵抗を介して接続されたLEDを点灯させることができます。
LOW
また、LOWの意味は、ピンがINPUTに設定されているか、OUTPUTに設定されているかによっても意味が異なります。pinMode()でピンをINPUTに設定し、digitalRead()で読み取った場合、Arduino(ATmega)は以下の場合にLOWを報告します。
・ピンに1.5V未満の電圧が存在する場合 (5Vボード)
・ピンに1.0V(約)未満の電圧が存在する場合(3.3V系ボード
pinMode()でピンをOUTPUTに設定し、digitalWrite()でLOWに設定した場合、ピンは0Vになります(5V、3.3V基板とも)。この状態では、電流を流すことができます。例えば、直列抵抗を介して+5ボルト(または+3.3ボルト)に接続されたLEDを点灯させることができます。
デジタルピンのモードの定義 INPUT、INPUT_PULLUP、OUTPUT
デジタルピンは、INPUT、INPUT_PULLUP、OUTPUTのいずれかで使用できます。pinMode()でピンを変更すると、そのピンの電気的な動作が変わります。
INPUTとして設定されているピン
pinMode()でINPUTに設定されたArduino(ATmega)のピンは、ハイインピーダンス状態になっていると言われています。INPUTに設定されたピンは、サンプリングする回路への要求が非常に小さく、ピンの前に100メガオームの直列抵抗があるのと同じです。このため、センサーの読み取りに便利です。
ピンをINPUTに設定し、スイッチを読み取る場合、スイッチがオープン状態のときには入力ピンは「フローティング」となり、予測できない結果となります。スイッチが開いているときに適切な読み取りを保証するためには、プルアップまたはプルダウン抵抗を使用する必要があります。この抵抗器の目的は、スイッチが開いているときにピンを既知の状態に引き上げることです。これは、フローティング入力を確実に防ぐのに十分な低い値であると同時に、スイッチが閉じているときに大きな電流を流さないようにするのに十分な高い値でもあるからです。詳しくは、デジタルリードシリアルのチュートリアルを参照してください。
プルダウン抵抗が使用されている場合、入力ピンは、スイッチが開いているときはLOW、スイッチが閉じているときはHIGHになります。
プルアップ抵抗が使用されている場合、入力ピンは、スイッチが開いているときはHIGH、スイッチが閉じているときはLOWになります。
INPUT_PULLUPとして設定されたピン
Arduinoに搭載されているATmegaマイクロコントローラには、アクセス可能な内部プルアップ抵抗(内部で電源に接続する抵抗)があります。外部プルアップ抵抗の代わりにこれらを使用したい場合は、pinMode()でINPUT_PULLUP引数を使用できます。
この使用例については、「Input Pullup Serial」のチュートリアルを参照してください。
INPUTまたはINPUT_PULLUPで入力として構成されたピンは、グランド以下の電圧(負の電圧)または正のパワーレール(5Vまたは3V)以上の電圧に接続されると、損傷または破壊される可能性があります。
OUTPUTとして構成されたピン
pinMode()でOUTPUTに設定されたピンは、低インピーダンスの状態にあると言われています。これは、他の回路にかなりの量の電流を供給できることを意味しています。ATmegaのピンは、他のデバイス/回路に最大40mA(ミリアンペア)の電流を供給(提供)または吸収(吸収)することができます。LEDは一般的に40mA以下の電流しか使用しないため、LEDへの電力供給に便利です。40mA以上の負荷(モーターなど)には、トランジスタなどのインターフェース回路が必要です。
出力として設定されたピンは、グランドまたはプラスの電源レールに接続されると、損傷または破壊される可能性があります。
ビルドインの定義 LED_BUILTIN
ほとんどのArduinoボードには、抵抗器と直列に接続されたオンボードLEDに接続されたピンがあります。定数「LED_BUILTIN」は、オンボードLEDが接続されているピンの番号です。ほとんどのボードでは、このLEDはデジタルピン13に接続されています。