2018.5.18更新
こんにちはコハペペです。先回はPWMアウトの機能を使って、LEDがだんだん明るくなるプログラムを紹介しました。だんだん明るくなりますが、なめらかではないですね。なめらかに変化させるには、PWMの値を0.1より小さい値で、waitの値も小さくして、細かく明るくしていけば実現できます。でも、myled = 0.01; wait(0.02);をいっぱいコピー&ペーストして書き換えていくのは大変です。
この時に使えるのが、先回紹介したforという命令です。
先回は以下のように紹介しました。
 for(int i=0 ; i<回数 ; i++)
 {
   命令;
   ...
 }
と書くと、回数の数だけ命令を繰り返し実行してくれます。

もう少しforの部分を詳しく紹介すると
for( A ; B ; C )の
 Aの部分は、変数というメモリーの用意と最初の値の設定
 Bの部分は、繰り返す条件
 Cの部分は、繰り返す時の変数の増え方
を書きます。

 Aでは、繰り返す時のカウンターとして使うメモリー機能(変数)をマイコンに用意させます。そして最初の値を書き込みます。
準備する変数には、1,2,3という整数のみ使える物と、1.5,2.8,3.3というように小数まで使える物があります。
iという名前で、整数のみ使える変数を用意する時は
 int i;
iという名前で、小数まで使える変数を用意する時は
 float i;
と書きます。
上記のfor命令はiは、0,1,2...と整数でカウントアップしたかったので、intを使いました。そして0からカウントアップしたかったので、最初の値が0となるように
 int i = 0; ( 整数の変数iを用意して、0を入れてください という命令になります)
となっています。

 Bでは、繰り返す条件を書いておきます。 i<4 とすると iという変数が0,1,2と増えていって3になった時点で繰り返しを終了します。このため{ }の中が4回繰り返されます。i<=4 と書くと i≦4の意味になり、0,1,2,3,4まで繰り返して終了します。このため{ }の中が5回繰り返されます。

 Cでは、繰り返す時の値の増え方(減り方でもOK)を指定します。i++は i = i + 1 の省略で、繰り返すたびにiを1ずつ増やします。

今回myledの値を0から0.01ずつ増やしていきたいので、
 Aでは準備する変数は、小数が使えるfloatで、最初の値を0にします。なので float i = 0.0
 Bでは、myledの値は1まで増えて欲しいので、i <= 1.0
 Cでは0.01ずつ増えて欲しいので、i = i + 0.01
とforの命令を書けばよいことになります。
floatの時は、数字に".0"を付けるようにしてください。付けないと整数として計算されてしまうことがあります(問題ないこともありますが)。

それではプログラムを書いていきましょう。「新規」でプログラム名を「mbed_pwm2」としてプログラムを作成します。
programumbedpwmnew2

先回と同じく、そして3行目のDigitalOutをPwmOutと書き換え、カッコの中のLED1をdp18に書き換えます。
programpwmdp18

6行目と7行目の間に先ほど紹介したforの命令を書いていきます。
for( float i = 0.0 ; i <= 1.0 ; i = i + 0.01 )
次の行に { を忘れないで書いてください。
programpwmfor

9行目のmyled = 1; を myled = i;に変更します。
これで、myledには0から0.01ずつ1.0までの値が入ることになります。
10行目のwait(0.2); を wait( 0.02 ); を一けた減らします。
11,12行は消して } を追加します。
programpwmfor2
これで、プログラムは完成です。「コンパイル」をクリックしてファイルをダウンロードしておいてください。
プログラムはこちらよりダウンロードできます。

次は回路をつくります。
今回はdp18を使っているので、ブレッドボードの右側の11行目にLEDの足の長い方を挿して、LEDの短い足を青いグランドの電源ラインに挿します。LEDは青か白を使いましょう。
breadboadpwmleddp18

あとは、マイコンとねこちゃんをこちらを参考につないでください。
ねこちゃんのUSBをパソコンとつないだときにできるドライブに、先ほどダウンロードしたファイルをコピーしてください。

これで書き込み完了です。赤いおめめを押してみてください。
LEDが徐々になめらかに明るくなるように光りましたか?
forの命令の説明が長くなり、難しいと思われたかもしれませんが、書いてみるとシンプルです。

ちなみに、徐々に暗くする場合には、7行目のforのカッコの中を
for( float i = 1.0 ; i >= 0.0 ; i = i - 0.01 )
とすればOKです。
意味は、iという小数が使える変数を用意して、最初の値を1にする。iが0.0になるまで、iを0.01ずつ減らしていくという感じです。
今回のプログラムは「マイコンで発明しよう実験セット」で実験することができます。
nekochanset