今回は、IchigoLatteでLEDを一定回数点滅させてみましょう。
前回作成したプログラムは、以下のように無限にLEDの点滅を繰り返すものでした。
while(1){
led(1);
sleep(500);
led(0);
sleep(500);
}
今度は10回数点滅させたらプログラムを終了させるように変更します。一般的なJavaScriptで繰り返し処理を行う場合はfor()命令を使います。また、最近のJavaScriptではイテレーター(forEachなど)を使って繰り返す手法もあります。
ただし、IchigoLatteではfor()もイテレーターを使った方法も使えません。というのも、どちらもサポート(実装)されていないからです。
そこでIchigoLatteでは、繰り返しを行う場合はwhile()を使います。繰り返し回数をカウントする変数を用意し、繰り返し処理を行うごとにカウントします。カウントした回数が10回になるまで繰り返します。
変数は数値を入れる箱です。IchigoLatteでは32ビット(-2147483647〜2147483647)範囲の数値を入れることができます。ちなみにIchigoJamは16ビット(-32768〜32767)です。
一般的なJavaScriptでは、変数を使う場合にvarまたはletを使って宣言します。varを使わずに変数を使用した場合はグローバル変数になります。
IchigoLatteで変数を使う場合は、必ずvarを使って宣言しないとエラーになります。例えば、繰り返し用の変数としてiを使う場合は、以下のように宣言します。
var i;
宣言と同時に値を入れることもできます。以下の例では、変数iに0を入れています。
var i=0;
IchigoLatteでのvarは、一般的なJavaScriptと異なる部分があります。これについては最後に補足として説明します。
何回繰り返すかは、while()の()内に条件式で指定します。以下のプログラムでは10回点滅させるとプログラムが終了します。
var i=0;
while(i<10){
led(1);
sleep(500);
led(0);
sleep(500);
i=i+1;
}
i=i+1; というのは変数iに1を足す、という意味です。JavaScriptの=は数学での等号記号の意味(つまり左辺と右辺が等しい)ではなく、右辺の処理結果を左辺に入れるという意味になります。i←i+1; といった感じです。
最初はiが0なので1を足すと1になります。次に繰り返し処理がまわってきた場合は、iに1を足すので2という具合に1ずつ増えていきます。
そのうち、iが10になるとwhile()で指定した条件を満たさなくなります。while(i<10) なので、変数iが10未満の場合だけ繰り返すことになっています。変数iが10になってしまったら条件を満たさなくなります。
するとwhile()のブロックの最後である}の次に処理が移ります。今回の場合、}の後には何もプログラムがないので、終了となりシェルに戻ります。
これで一定回数繰り返しLEDを点滅させるプログラムができたので、シェルからms .と入力しリターンキーを押して実行させてみましょう。10回点滅するとシェルに戻ります。繰り返し回数を変更して、動作を確認してみてください。
最後に、IchigoLatteでの変数宣言についての補足です。一般的なJavaScriptでのvarとは違いIchigoLatteではletと同じような動作をします。つまり、ブロック内でのみ有効な変数として宣言・扱われます。
一般的なJavaScriptでは、varによる変数宣言での想定とは異なるトラブルが発生することがあります。これを回避するために、15年ほど前にletが登場しました。
当初はFirefoxでしか使えませんでしたが、今ではどのブラウザでも使用することができます。letであればvarの不具合を回避できるので、なるべくならletを使った方が後々のトラブルは減らせます。
IchigoLatteのvarはletと同じ働きになるので、最初からトラブルを未然に防ぐ設計になっているわけです。
【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/
長年使っていたマシン(MacPro)が不調に。涼しかった今年の夏を乗り越えられなかったのか、と思ってました。動作も怪しくなり(画面キャプチャーができないとか、完全にハングアップしてしまったり)、これは駄目なと思ったのですが……。
マシンの中身をきれいに掃除したら、不調だったマシンが超快適に! 動作も2倍くらい速くなって最新マシンいらないかな、という感じになりました。
いつも手前のCPUをメインに掃除していたので、奥のCPUのさらに奥に詰まった埃が不調の原因だったみたいです。ヒートシンクの奥の奥に結構詰まっていたので(CPUの近くだし)、それで速度低下、いきなりハングアップしていたということでした。
マシンを買い換えるにしてもiMacProは……何か違う……ので、今回も見送るしかなさそうです。
・InDesign CS6 JavaScript Reference
http://www.openspc2.org/reibun/InDesignCS6/ref/
・Photoshop CS6 JavaScript Reference
http://www.openspc2.org/reibun/PhotoshopCS6/ref/
・Illustrator CS6 JavaScript Reference
http://www.openspc2.org/reibun/IllustratorCS6/ref/
・みんなのIchigoLatte入門 JavaScriptで楽しむゲーム作りと電子工作
https://www.amazon.co.jp/dp/4865940936
[正誤表]
http://www.openspc2.org/book/error/ichigoLatte/
・After Effects自動化サンプルプログラム 上巻、下巻
https://www.amazon.co.jp/dp/4844397591
https://www.amazon.co.jp/dp/4844397605
・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP
http://digiconcart.com/dccartstore/cart/info/2561/218591
・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/
・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/
・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/
・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/
・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/