今回はPepperを使ってLEDの点滅を行うプログラムのつづきです。前回、LEDの点滅ができました。少しプログラムを改造していきます。また、点灯するLEDを増やし、それに対応するようにプログラムを修正します。
【Processingでプログラム(その2)アナログ出力を試す】

 少しだけプログラムを改造して、アナログ出力の利点を活用してみます。
 マウス・ボタンを押し続けると、だんだんに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をつないでください。

pep06-12 circuit01.png ブレッドボートへの実装状況です。

pep06-13 two LED.jpg
【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()の中で、押されたボタンが右か左かを判断して、それぞれの変数の値を変更しています。

pep06-15 One of Two LED.jpg 右ボタンでポート0につないだLED0が、左ボタンでLED1が点灯するはずです。
 プログラム2とプログラム3を組み合わせると、左右マウスボタンでLEDがだんだんについたり消えたりするプログラムを作成することができます。試してみてください。

 このように、パソコンと連携することで、単なるキーボード/マウス/ディスプレイ以外のインタラクションを実現することが、フィジカル・コンピューティングの醍醐味です。工夫すると、たとえば、メールが来たらLEDがチカチカするようなプログラムを作成することができます。

【連載予定】
 次回は、ブレッドボード上でアナログ入力を試します。

【コラム:Processingのプログラミング】
 Gainerのライブラリには例題プログラムが付属しています。スケッチのメニューから、Examples/Gainer_examplesで開いて、中身を見てみると参考になります。
 また、以下のURLに英文ですがリファレンスマニュアルがあります。ブックマークしておいてプログラミングの参考にするとよいでしょう。
  http://processing.org/reference/index.html
 ProcessingはJavaをベースに開発されています。Processingのほうが、Javaよりも簡単にプログラムできるように設計されています。
 今 回紹介したプログラムでは、ウインドウを新たに作成して、その中でマウス・ボタンが押された場合の処理を行っていますが、もしこれをJavaで記述すると、 100行弱のプログラムになってしまいます。実際にはProcessingのプログラムはJavaのコンパイラによってコンパイルさせます。

桑田喜隆

トラックバック(0)

このブログ記事を参照しているブログ一覧: Ginger/Pepper/Sugarでフィジカル・コンピューティング(7)

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/2251

コメントする





マイコンと電子工作 No.6


マイコンと電子工作 No.4


マイコンと電子工作No.1
サポート・ページはこちら

カテゴリ

このブログ記事について

このページは、yoshidaが2008年11月20日 11:56に書いたブログ記事です。

ひとつ前のブログ記事は「連載(8)Arduinoで何でも制御 サンプル・スケッチを動かす(2)」です。

次のブログ記事は「連載(9)Arduinoで何でも制御 サンプル・スケッチを動かす(3)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログのライセンスは クリエイティブ・コモンズライセンス.