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); }