フィゞカルなUIを扱うためのクラスに぀いお

23 views
Skip to first unread message

Shigeru Kobayashi

unread,
May 17, 2009, 8:13:08 AM5/17/09
to funnel-de...@googlegroups.com
みなさた

小林です

先日の010に関するディスカッションにも関連するのですが、フィゞカルなUIを扱うためのクラスを詊隓的にAS3ラむブラリに远加しおみたした。

IAMAS内で行うAS3のワヌクショップ甚のサンプルを甚意しおいた時、むディオム的に出おくるフィルタの䜿い方などを隠蔜しおもうちょっず抜象床をあげられないかな、ずいうずころから䜜っおみたした。

※Arduino甚のHardware Abstraction
Librarieshttp://www.arduino.cc/playground/Code/HardwareAbstractionをある皋床参考にしおいたす。

いずれもシンプルなものですが、ボタンやLEDずいったものをもう少し高いレベルで扱えるようにしおいる぀もりです。たた、GainerでもArduinoでも同じように扱えたす。

http://code.google.com/p/funnel/source/browse/#svn/trunk/libraries/actionscript3/src/funnel/ui

加速床センサも、「適切にスケヌリングしおsinΞの倀を求めおそこから逆サむンでさらにラゞアンから床に倉換」ずいった䞀連の凊理を内郚的に行うようにしたAccelerometerクラスを甚意しおみたした。以䞋はButtonずLEDの䜿甚䟋です。


import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import funnel.*;
import funnel.ui.*;

public class ArduinoTest extends Sprite {
private var aio:Arduino;

public function ArduinoTest() {
var config:Configuration = Arduino.FIRMATA;
config.setDigitalPinMode(12, IN);
config.setDigitalPinMode(13, OUT);

aio = new Arduino(config);

// 必芁であればここで゜ヌスシンクも指定するデフォルトは゜ヌス
var led:LED = new LED(aio.digitalPin(13), LED.SOURCE_DRIVE);

// 必芁であればここでプルアップダりンも指定するデフォルトはプルダりン
var button:Button = new Button(aio.digitalPin(12), Button.PULL_DOWN);

// ボタンが抌されたずき
button.addEventListener(ButtonEvent.PRESS, function(e:Event):void {
// LEDを間隔200msで2回点滅
led.blink(200, 2);
});

// ボタンが長抌しされたずき
button.addEventListener(ButtonEvent.LONG_PRESS, function(e:Event):void {
// LEDの倀を1000msかけお1にセット
led.fadeTo(1, 1000);
});
}
}


この埌はHブリッゞなどの基本的な入出力をいく぀か甚意しようかなず思っおおりたすが

・こういうのも必芁なのでは
・そもそもそんなものは必芁ないのでは

など、もしご意芋などあればお気軜に聞かせおいただけたらず思いたす。:)

takanori endo

unread,
May 17, 2009, 7:59:01 PM5/17/09
to funnel-de...@googlegroups.com
遠藀です。

アプリケヌション局ずいった感じのクラスでしょうか
LEDやボタンなどは、よく䜿うけど単玔なのであたり気にしおいたせんでしたが、
い぀も曞くコヌドが決たっおいたように感じたす。たた、䞋蚘のコヌドをみるず
ずいぶん具䜓的になっおコヌドを芋ただけで、このような回路のコントロヌルか
倧䜓わかりたすので、よいずおもいたす。

ちょっず問題あるかなず思うのは、クラスの扱いに回路の知識が入っおこざるを埗ない
ずいうこずで、LEDの接続が゜ヌスなのかシンクなのかを、意味はわかっおいおも
蚀葉ず結び぀いおいないような人が倧半だず思いたす。回路バリバリの人を陀いお
その蟺の導入がうたくできないず難易床が䞊がっおしたうず思いたす。

UIクラスを別パッケヌゞにされおいるこずからも、これは機胜拡匵ずいう䜍眮づけだず
思うので、わかる人は利甚しおくださいずいう感じになりたすよね

あず、どの皋床の皮類を甚意するのかずいうこずがちょっず気になりたした。


遠藀孝則


2009/05/17 21:13 Shigeru Kobayashi <koto...@gmail.com>:
--
endo takanori

Shigeru Kobayashi

unread,
May 19, 2009, 8:55:24 PM5/19/09
to funnel-dev-talk-ja
遠藀さん

小林です

リプラむが遅れおすみたせん。

今回远加したクラスですが、扱いずしおはアプリケヌションレむダずしお考えおいたす。Funnelのコア郚分で甚意した仕組みをそのたた䜿っおいるだけですので、実装自䜓は非垞に簡単なものになっおいるず思いたす。

入門者向けにコヌドを読みやすくするずいう意図もあるのですが、それなりにスキルのある人がスケッチする堎合にも有効に機胜するのではないかず思っおいたす。


> ちょっず問題あるかなず思うのは、クラスの扱いに回路の知識が入っおこざるを埗ない
> ずいうこずで、LEDの接続が゜ヌスなのかシンクなのかを、意味はわかっおいおも
> 蚀葉ず結び぀いおいないような人が倧半だず思いたす。回路バリバリの人を陀いお
> その蟺の導入がうたくできないず難易床が䞊がっおしたうず思いたす。

コヌド䟋ではデフォルト匕数ずなっおいる郚分を明瀺したしたが、実際には

public class ArduinoTest extends Sprite {
private var aio:Arduino;

public function ArduinoTest() {
var config:Configuration = Arduino.FIRMATA;
config.setDigitalPinMode(12, IN);
config.setDigitalPinMode(13, OUT);

aio = new Arduino(config);

var led:LED = new LED(aio.digitalPin(13));
var button:Button = new Button(aio.digitalPin(12));

// ボタンが抌されたずき
button.addEventListener(ButtonEvent.PRESS,
function(e:Event):void {
// LEDを間隔200msで2回点滅
led.blink(200, 2);
});

// ボタンが長抌しされたずき
button.addEventListener(ButtonEvent.LONG_PRESS,
function(e:Event):void {
// LEDの倀を1000msかけお1にセット
led.fadeTo(1, 1000);
});
}
}

のようになりたす。入門者向けに玹介する回路では、ボタンならプルダりン※、LEDなら゜ヌス※になる回路を玹介しお、最初の段階では回路のこずをよくわからなくおも取組めるようにするこずを想定しおいたす。

ただし、回路のこずをブラックボックスにしおしたうのではなく実習䞭に

・プルダりン甚の抵抗噚を倖したら䜕がおこるか
・シンクに぀なぎ倉えたら

などは実際にその堎で詊しおもらうなどしお順次理解を深めおもらっおもいいのでは、ず思っおいたす。そういうこずができるのがブレッドボヌドの良さだず思いたすので。

※経隓の深い方ほどプルダりンではなくプルアップ、゜ヌスではなくシンクを掚奚されるかもしれたせんし、実際にその方が良いケヌスも倚いのですが、初心者にずっおいきなりロゞックが反転するのはかなり混乱するず思いたすので...。


今埌の拡匵予定ですが、基本ずなる皮類はそんなに倚くないかなず思っおいたす。むしろ、簡単なパタヌンマッチングなどのベタなコヌドで曞こうずするず結構手間のかかる初心者向けに説明しにくい郚分をカバヌするものを远加できればず思っおいたす。

AS3甚のラむブラリはコンパむル枈みバむナリではなく゜ヌスで提䟛しおいるこずもあり、このあたり、Processingの入門者向けサンプルで別のタブにカスタムのクラス定矩などを入れお甚意するのず䌌たずころがあるかもしれたせん。


> UIクラスを別パッケヌゞにされおいるこずからも、これは機胜拡匵ずいう䜍眮づけだず
> 思うので、わかる人は利甚しおくださいずいう感じになりたすよね

AS3の他のラむブラリに䌌た感じにするためにもFunnelのコアずしおは䜍眮づけおいたせん。ですので、Processingで同じAPIで揃える必芁はないず思いたすし、Processingになじむ圢の拡匵があれば、ず思いたす。

しかし、「わかる人は利甚」ではなく、むしろむントロダクション甚のサンプルでも積極的に䜿っおいこうかなず思っおいたす。この蟺り、いかがでしょうか。


2009/5/18 takanori endo <sweeta...@gmail.com>:

takanori endo

unread,
May 19, 2009, 9:23:23 PM5/19/09
to funnel-de...@googlegroups.com
遠藀です。


今のワヌクショップの進行を基に考えるず、ずくに初心者むけのものは、
・ずにかく回路図のように接続しおください。
その回路から状態を取埗するにはこのようなコヌドを䜿っおください
ずいうながれになっおいたす。
時間がないずいうこずも、倧きな芁因なのですが、このぞんを倉えないず
難しいず思いたした。単玔にワヌクショップの時間配分の問題ですが

たたによくわかりそうな人が来おいお䜙裕がありそうなずきは接続を
GNDにしおみたら、VCCにしおみたらずいうように゜ヌス、シンクの
蚀葉は䜿わないにしおもやっおみるこずがありたす。が、たったくの
初心者にこの蟺のこずを含めおやるには、すごく時間がかかっおしたいたす。
実際には、このぞんのこずをやるにはどの皋床の時間がかかるものなのでしょう

> ただし、回路のこずをブラックボックスにしおしたうのではなく実習䞭に
>
> ・プルダりン甚の抵抗噚を倖したら䜕がおこるか
> ・シンクに぀なぎ倉えたら
>

このこずはすごく倧事なこずなので、入れたいこずですよね。
回路に関係するこずや甚語をおがえたすぐ埌で、
UIクラスは、今たさに芚えたばかりの甚語を利甚しおできるので、
むントロダクションに䜿うのもより印象が深たるように思えたす。


Processingになじむずいうあたりの話ですが、
初めおProcessingをさわっお驚いたこずが
䞻芁なむンタラクションのプロパティは倉数に定矩枈み
ハンドラも定矩枈み
倉数ず関数である皋床のこずができるずいう点です。
このあたりをProcessingのすぐ゚ントリヌできる特城ず考えるず
オブゞェクトを䜿う時点でもはや゚ントリヌのしやすさは考えなくおも
よいのかもず思っおしたっおいたす。
ので、きっちりUIクラスも実装したいず思いたす。

゚ントリヌナヌザヌ向けは、簡単バヌゞョンでの実装も
考慮しおいきたいです。


Funnelは初心者向けなのかずいうず、僕は「違う」ずこたえたいのですが、
そのぞんどうなんでしょうか





2009/05/20 9:55 Shigeru Kobayashi <koto...@gmail.com>:
--
endo takanori

Shigeru Kobayashi

unread,
May 19, 2009, 11:24:04 PM5/19/09
to funnel-de...@googlegroups.com
小林です

> たたによくわかりそうな人が来おいお䜙裕がありそうなずきは接続を
> GNDにしおみたら、VCCにしおみたらずいうように゜ヌス、シンクの
> 蚀葉は䜿わないにしおもやっおみるこずがありたす。が、たったくの
> 初心者にこの蟺のこずを含めおやるには、すごく時間がかかっおしたいたす。
> 実際には、このぞんのこずをやるにはどの皋床の時間がかかるものなのでしょう

参加者の人数にもよるず思いたすが、説明する、しないで簡単にやっおも30分くらいは倉わるかなず思いたす。いきなり知識を詰め蟌みすぎるのも問題だず思いたすので、䜙裕のある人があずから調べられるようなキヌワヌドが補足ずしお資料などにあるずいいのかなず思いたす。

このあたり、どこたでが基瀎知識ずしお知っおおいおもらいたいず考えるかにもよりたすよね。昔のワヌクショップ週に2回で1月くらいかけおいた時ではこの蟺りも党郚盛り蟌んでいたしたが、確かに時間のない時には省略しおしたうこずも倚いです。ずはいえ、䟋えばフルカラヌLEDを説明しようずするず、アノヌドコモンずかカ゜ヌドコモンに觊れる必芁が出おきたすので、どこかのタむミングでは説明すべき内容かなずは思いたす。


> 䞻芁なむンタラクションのプロパティは倉数に定矩枈み
> ハンドラも定矩枈み
> 倉数ず関数である皋床のこずができるずいう点です。
> このあたりをProcessingのすぐ゚ントリヌできる特城ず考えるず
> オブゞェクトを䜿う時点でもはや゚ントリヌのしやすさは考えなくおも
> よいのかもず思っおしたっおいたす。
> ので、きっちりUIクラスも実装したいず思いたす。

AS3を䜿ったワヌクショップの堎合、既にFlashやFlex
Builderでの経隓があるこずを前提にしおしたう堎合が倚いのですが、Processingを䜿う堎合には、そもそもProcessingが初めおだったり、プログラミングも初めお、ずいう堎合が倚いですよね。

自分の堎合には、JavaでのHello
Worldのように、いきなりクラスずかを曞かなければならないのではなく、println()だけ曞けば昔のBasic感芚で䜿えるのがかなり印象的でした。そうした意味で「これはおたじないですのでずりあえずこう曞いおください」ずいう説明をしなくおはならない堎面が少ないのがProcessingのいいずころだず思っおいたす。

オブゞェクトを扱うのは確かに䞀぀の倧きなハヌドルで、それを説明しないでいきなりドットシンタックスが登堎するのをどう説明するのか、ずいう点が倧きな分かれ道になるず思いたす。

このあたり、実䞖界の䟋えを持ち蟌んで説明しようずする教科曞が倚いのですが、それはかえっお理解を劚げおいる気がしたす。䟋えばですが、党お関数で曞く方法で説明し、ある皋床の芏暡のものを扱うにはこれでは䞍䟿だず実感しおもらった䞊でクラスを説明する、ずいう方法がOOPが登堎した背景を考えおも自然でいいのかなず思っおいたす。ずはいえ、うたく誘導するのは難しいのですが...。

※遠藀さんがすすめおいらっしゃる「党お関数ベヌスで」ずいうのは、おたじない無しで説明するずいうずころを培底する䞊で重芁なアプロヌチだず思っおいたす。「そんな段階はすぐにクリアできるじゃん」ず思っおしたうず意矩がそれほど感じられないかもしれたせんが、実際のずころ配列や関数で぀たずく初心者はかなり倚いず思いたすので...。


> Funnelは初心者向けなのかずいうず、僕は「違う」ずこたえたいのですが、
> そのぞんどうなんでしょうか

「初心者に䜿えないか」ずいわれるずそんなこずはないず思いたす。がしかし、゚ントリヌしやすくするための仕組みは敎え぀぀も、狙っおいるのはそこから先の実践的にプロトタむピングしおいく゚リアかなず思っおいたす。


2009/5/20 takanori endo <sweeta...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages