🚨
LEDでわかるデジタル出力とアナログ出力の違い
0と1で制御するデジタル出力
256段階を扱えるアナログ出力
デジタル出力の例
void setup() {
pinMode(9, OUTPUT);
}
int count = 0;
void loop() {
digitalWrite(9, sin(2 * PI / (60 * 2) * count) > 0);
delay(1000 / 60);
count++;
}
- 電圧があるかないかの二通りで制御する
- digitalWrite の第二引数に 0 か 1 を渡せば 0V か 5V になる
アナログ出力の例
void setup() {
pinMode(9, OUTPUT);
}
int count = 0;
void loop() {
analogWrite(9, 128 + sin(2 * PI / (60 * 2) * count) * 127);
delay(1000 / 60);
count++;
}
- デジタル版とのソースコード上での違いは(ほぼ) digitalWrite を analogWrite にしただけ
- PWM (Pulse With Modulation) で0Vから5Vまでを256分割できる
- 具体的には 0V と 5V にした時間をそれぞれ仮に 50% として短時間で繰り返すと繋がれた部品たちは平均値の 2.5V 来ていると勘違いするらしい
255は5Vではないのに5Vになる理由
こちらの記事が興味深い
- 本来 analogWrite で255を書き込んでも5Vにはならない
- 5V未満の5Vにもっとも近い電圧になる
- にもかかわらず255で5Vになる理由は analogWrite が255を特別扱いしているから
- 255なら
digitalWrite(..., HIGH)
を実行する - 同様に0も特別扱いで
digitalWrite(..., LOW)
を実行している
- 255なら
疑問
デジタル出力に比べてアナログ出力(PWM)を使うと消費電力が高くなる? (TODO: わかったら書く)
Discussion