PMWで出力を調節する(analogWrite) LED#03

Arduino

LEDの光の強さを調節する

PMWモード

先程はdigitalWrite(2,HIGHorLOW)を使いましたが今度はanalogWrite(3,0-255) を使います。Arduino UNOのpinでanalogWriteを使えるのは3、5、6、9、10、11pinです。

どうでしょう?3段階で光りましたか?これでとりあえずLEDの基本はマスターできましたね。0から255までだんだん強くなっていきます。digitalWriteはスイッチのオンオフだけですが、これで細かな調整ができます。

const int LED=3;
void setup() {
  // setup内は一回だけ実行します
pinMode(LED,OUTPUT);
}

void loop() {
  // loop内は繰り返し実行します
analogWrite(LED,255);
delay(50);
analogWrite(LED,0);
delay(1000);
analogWrite(LED,100);
delay(50);
analogWrite(LED,0);
delay(1000);
analogWrite(LED,30);
delay(50);
analogWrite(LED,0);
delay(1000);
}

PMWで細かく調整する

0から255まで段階的に光を強くしてみましょう。こんなことしてたら恐ろしいほどの時間がかかりますね。途中でミスってバグを出してしまうかもしれません。そんなときはfor文を使いましょう。こんなめんどうなこともかんたんにこなしてくれるのです。255行x2行のプログラムを書かずにすんでしまうのです。

const int LED=3;
void setup() {
  // setup内は一回だけ実行します
pinMode(LED,OUTPUT);
}

void loop() {
  // loop内は繰り返し実行します
analogWrite(LED,0);
delay(10);
analogWrite(LED,1);
delay(10);
analogWrite(LED,2);
delay(10);
analogWrite(LED,3);
delay(10);
analogWrite(LED,4);
delay(10);
analogWrite(LED,5);
delay(10);
.
.
.
//ギブアップです
}

for文は私達を救う

for(初期化;条件式;加算){繰り返す}という構造になっています。なのでまずは変数iを0にします。iが255以下ならiに1を足した数をiにします。iが255を越えるとブレース{}を抜けて次の処理に入ります。この場合は、2つめの閉じブレース}に行って、またloop(){の先頭にもどります。このようにたったの3行かくだけで510行分の仕事をしてくれます。余った時間は他のことをして遊びましょう。

const int LED=3;
void setup() {
  // setup内は一回だけ実行します
pinMode(LED,OUTPUT);
}
void loop() {
  // loop内は繰り返し実行します
for (int i=0;i<=255;i=i+1){
analogWrite(LED,i);
delay(10);
}
}

変数とはなにか?

このiが変数です。iはコップのようなものと思ってください。iには0から255までの数字が順番に入ります。そしてつぎつぎに自動的に処理をしてくれるのです。最後に次第に明るくなってそして消えていくプログラムを考えてみましょう。

(i=i+1)は変数iにもともとのiに1を足したものをiにするということです。これは(i++)に書き換えられます。(i=i-1)は(i- -)になります。また条件式は<=で以下、>=以上、<はより小さい。>はより大きい。==は等しいです。=は1つにしてしまうと代入してしまうので注意が必要です。

const int LED=3;
void setup() {
  // setup内は一回だけ実行します
pinMode(LED,OUTPUT);
}
void loop() {
  // loop内は繰り返し実行します
for (int i=0;i<=255;i++){ //明るくなっていく
analogWrite(LED,i);
delay(10);
}
for (int i=255;i>=0;i--){ //暗くする
analogWrite(LED,i);
delay(10);
}
delay(1000);
}
タイトルとURLをコピーしました