タイトルの通りです。この2つは何が違うのでしょうか?
アナログライト(ピン,0-255)とデジタルライト(ピン,LOW-HIGH)
の比較。
digitalWriteは、指定されたピンをHIGH/LOWの2つの状態のいずれかに設定します。これは、それぞれ5V(一部のボードでは3.3V)とグランドに相当します。
analogWriteは、使用する出力の種類によって異なる場合があります。
PWMピンに適用した場合、ピンを周期的なハイ/ロー信号に設定し、信号がハイになる割合は、書き込まれた値に比例します。 例えば、以下のようになります。
analogWrite(PWMpin,255)
100%HIGHになり、一方
analogWrite(PWMpin,127)
50%の確率でHIGHになり、50%の確率でLOWになります。
DACピン(DUE or MEGA&s>などの一部のボードで利用可能)にanalogWriteを適用する場合。
analogWriteは、指定されたピンが、指定されたアナログ値に比例する電圧レベルを実際に出力するようにします。
例えば、Dueの場合、最大電圧3.3v、デフォルトのアナログ分解能は8ビット-[0:255]となります。
analogWrite(DACpin,255)
指定されたピンが3.3Vを出力し
analogWrite(DACpin,127)
指定した端子を1.35Vで出力します。
digitalWrite` は出力ピンを LOW か HIGH に設定します(これらの電圧はプロセッサの Vcc に依存します)。UnoやMegaの場合、0Vか5V(またはそれに近い電圧)でしょう。
digitalWrite(LOW)のスクリーンショットです。
つまり、出力端子は0Vの状態です。
次にdigitalWrite(HIGH)です。
出力電圧は5Vです。
AnalogWrite` は、PWM(パルス幅変調)を出力するようにプロセッサのタイマーを設定するので、本当は PWMwrite と名付けるべきでした。
それでは、analogWrite(1)を試してみましょう。
電圧レベルは、ほとんどの場合0Vで、短時間で5Vになることがわかります。また、周波数が490Hzであることもわかります。これはanalogWriteのリファレンスページに書いてあるとおりです。
拡大表示する。
これは、タイマーの周期である2048 µsのちょうど1/256にあたります。つまり、1/256 (0.39%)のデューティサイクルがあるわけです。
0から255の中間の値であるanalogWrite(127)を試してみましょう。
これで、出力がちょうど半分の時間だけHIGHになり、残りの時間はLOWになることがわかります。
analogWrite(254)を試してみましょう。
これはanalogWrite(1)の逆です。出力は短時間を除いてずっとHIGHです。ズームインします。
先ほどの画像では8秒間オンになっていましたが、現在は8秒間オフになっています。
analogWrite (0)は
digitalWrite (LOW)` と同じです。
analogWrite (255)は
digitalWrite (HIGH)` と同じです.
このことは、wiring_analog.cの該当するコードで証明されています。
if (val == 0)
{
digitalWrite(pin, LOW);
}
else if (val == 255)
{
digitalWrite(pin, HIGH);
}
analogWrite` は基本的にハードウェアタイマーを PWM 出力するように設定します。0 は常にオフ、255 は常にオン、そしてその中間の値で PWM (パルス出力) が得られます。
タイマーの詳細については、タイマーに関する私のページを参照してください。
digitalWriteはピンをHighまたはLowに設定し、そのピンのために再度digitalWriteが呼ばれるまで、その値を維持します。
analogWriteは、第2パラメータで指定されたデューティサイクルに基づくパルス長を持つ発振値を持つピンを設定します。
だから
digitalWrite (5, HIGH); // Pin 5 goes high
analogWrite (6, 127); // Pin 6 oscillates regularly between 0v and 5v (or 3.3v) at about 250Hz.