今回はPepperを使ってLEDの点滅を行うプログラムのつづきです。前回、LEDの点滅ができました。少しプログラムを改造していきます。また、点灯するLEDを増やし、それに対応するようにプログラムを修正します。
【Processingでプログラム(その2)アナログ出力を試す】
少しだけプログラムを改造して、アナログ出力の利点を活用してみます。
マウス・ボタンを押し続けると、だんだんにLEDが明るくなるプログラム2analogInterraction1.pdeを作成してみました。
前のプログラムと異なるのは、draw()の中でマウスが押されているか判断して、変数onの値を増減している点です(21-32行)。また44行でpepperのポート0にアナログ値を出力しています。
draw()の中で直接マウス・ボタンの状態をチェックしているので、プログラム1で使ったマウス・ボタン関係の関数は利用していない点も注意してください。
【ハードウエアの作成(その2)LED増設】
次に、ハードウエアを少しだけ拡張して、LEDを二つにしてみます。
回路図はほとんど同じです。ポート1にLEDをつないでください。
ブレッドボートへの実装状況です。

【Processingでプログラム(その3)マウス左右ボタンを使う】
LEDが2個になりましたので,プログラム1を改造して、左右のボタンでLEDを点灯するanalogInterraction2.pdeを作成してみました。
これは、プログラム1の一部を拡張しています。LED0、1に対応してon0, on1という変数を導入しています(8行め)。
関数mousePressed(), mouseReleased()の中で、押されたボタンが右か左かを判断して、それぞれの変数の値を変更しています。
右ボタンでポート0につないだLED0が、左ボタンでLED1が点灯するはずです。
プログラム2とプログラム3を組み合わせると、左右マウスボタンでLEDがだんだんについたり消えたりするプログラムを作成することができます。試してみてください。
このように、パソコンと連携することで、単なるキーボード/マウス/ディスプレイ以外のインタラクションを実現することが、フィジカル・コンピューティングの醍醐味です。工夫すると、たとえば、メールが来たらLEDがチカチカするようなプログラムを作成することができます。
【連載予定】
次回は、ブレッドボード上でアナログ入力を試します。
少しだけプログラムを改造して、アナログ出力の利点を活用してみます。
マウス・ボタンを押し続けると、だんだんにLEDが明るくなるプログラム2analogInterraction1.pdeを作成してみました。
プログラム 2
001 /*
002 Hello World from pepper
003 じわじわ明るくなる
004 */
005 import processing.gainer.*;
006
007 PFont myFont;
008 Gainer gainer;
009 int on = 0;
010
011 void setup(){
012 size(250,250);
013 gainer = new Gainer(this,Gainer.MODE1);
014 myFont = loadFont("CourierNewPSMT-24.vlw");
015 textFont(myFont, 24);
016
017 frameRate(30);
018 }
019
020 void draw(){
021 // check mouse status
022 if (mousePressed == true) {
023 on+= 8;
024 if (on > 255) {
025 on = 255;
026 }
027 } else {
028 on-= 8;
029 if (on < 0) {
030 on = 0;
031 }
032 }
033 // Display Control
034 if (on > 0) {
035 background(255);
036 fill(0);
037 text("ON " + on ,100, 120);
038 } else {
039 background(0);
040 fill(255);
041 text("OFF" ,100, 120);
042 }
043 // LED Control
044 gainer.analogOutput(0,on);
045 }
前のプログラムと異なるのは、draw()の中でマウスが押されているか判断して、変数onの値を増減している点です(21-32行)。また44行でpepperのポート0にアナログ値を出力しています。
draw()の中で直接マウス・ボタンの状態をチェックしているので、プログラム1で使ったマウス・ボタン関係の関数は利用していない点も注意してください。
【ハードウエアの作成(その2)LED増設】
次に、ハードウエアを少しだけ拡張して、LEDを二つにしてみます。
回路図はほとんど同じです。ポート1にLEDをつないでください。
【Processingでプログラム(その3)マウス左右ボタンを使う】
LEDが2個になりましたので,プログラム1を改造して、左右のボタンでLEDを点灯するanalogInterraction2.pdeを作成してみました。
プログラム 3
001 /*
002 Hello World from pepper
003 */
004 import processing.gainer.*;
005
006 PFont myFont;
007 Gainer gainer;
008 int on0 = 0, on1 = 0;
009
010 void setup(){
011 size(250,250);
012 gainer = new Gainer(this,Gainer.MODE1);
013 myFont = loadFont("CourierNewPSMT-24.vlw");
014 textFont(myFont, 24);
015 frameRate(30);
016 }
017
018 void draw(){
019 // Display Control
020 if (on0 == 1 || on1 == 1) {
021 background(255);
022 fill(0);
023 text("ON" ,100, 120);
024 } else {
025 background(0);
026 fill(255);
027 text("OFF" ,100, 120);
028 }
029 // LED Control
030 gainer.analogOutput(0, on0 * 255);
031 gainer.analogOutput(1, on1 * 255);
032 }
033
034 void mousePressed() {
035 if(mouseButton==LEFT)
036 on0 = 1;
037 if(mouseButton==RIGHT)
038 on1 = 1;
039 }
040 void mouseReleased() {
041 if(mouseButton==LEFT)
042 on0 = 0;
043 if(mouseButton==RIGHT)
044 on1 = 0;
045 }
これは、プログラム1の一部を拡張しています。LED0、1に対応してon0, on1という変数を導入しています(8行め)。
関数mousePressed(), mouseReleased()の中で、押されたボタンが右か左かを判断して、それぞれの変数の値を変更しています。
プログラム2とプログラム3を組み合わせると、左右マウスボタンでLEDがだんだんについたり消えたりするプログラムを作成することができます。試してみてください。
このように、パソコンと連携することで、単なるキーボード/マウス/ディスプレイ以外のインタラクションを実現することが、フィジカル・コンピューティングの醍醐味です。工夫すると、たとえば、メールが来たらLEDがチカチカするようなプログラムを作成することができます。
【連載予定】
次回は、ブレッドボード上でアナログ入力を試します。
【コラム:Processingのプログラミング】
Gainerのライブラリには例題プログラムが付属しています。スケッチのメニューから、Examples/Gainer_examplesで開いて、中身を見てみると参考になります。
また、以下のURLに英文ですがリファレンスマニュアルがあります。ブックマークしておいてプログラミングの参考にするとよいでしょう。
http://processing.org/reference/index.html
ProcessingはJavaをベースに開発されています。Processingのほうが、Javaよりも簡単にプログラムできるように設計されています。
今 回紹介したプログラムでは、ウインドウを新たに作成して、その中でマウス・ボタンが押された場合の処理を行っていますが、もしこれをJavaで記述すると、 100行弱のプログラムになってしまいます。実際にはProcessingのプログラムはJavaのコンパイラによってコンパイルさせます。
桑田喜隆





コメントする