🚨
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 にしている時間を、例えば半々として切り替えを繰り返すと部品たちは平均値の 2.5V が来ていると勘違いするらしい。デジタルな世界でそんなことある? って思うのだけど実際そうなっている。
255 は 5V ではないのに 5V になるのはなぜ?
analogWrite が 255 を特別扱いしているから。正確には 0 と 255 を特別扱いしている。0 なら digitalWrite で LOW を送り、255 なら HIGH を送るように小細工されている。
参照:
疑問
デジタル出力に比べてアナログ出力(PWM)を使うと消費電力が高くなる? (TODO: わかったら書く)
Discussion