Upload
biscuitjam
View
829
Download
2
Embed Size (px)
DESCRIPTION
Presentation slide of Physical Computing session in LLTiger 2010
Citation preview
くるくる研究室
フィジカルコンピューティングをはじめよう。
くるくる研究室
くるくる研究室とは、クリエイティブ集団「 kurukuru」の部活のひとつ。ケータイアプリからフィジカルコンピューティングまで、幅広く色々なアプリやプロダクトを開発する部活である。
http://labs.kuru2jam.com/原
央樹 尾崎俊介http://labs.kuru2jam.com/
@hara3 @biscuitjam
作品紹介
3
http://labs.kuru2jam.com/
くるくる研究室
4
【事例】お化け屋敷
5
フィジカルコンピューティング
6
と言っても、いきなり難しいと思うので、できるところから、やってみる。
7
体験しよう【ポチっとレンジ】
8
体験したい人!
動作の仕組み
9
③ソケット通信
電気信号
④電子回路
Data
②一定間隔でデータを確認①HTMLから POST
10
HTMLから POSTPHP
ケータイからアクセスする PHP
11
<?php// HTML文字のエスケープ$text = htmlspecialchars( $_POST["push"] );if($text){
$fp = fopen("./status.dat", "w");fwrite($fp, 1);fclose($fp);
$url = "http://www.yourserver.com/complete.html";header("Location: $url") ;
?><html><head>
…
ケータイからアクセスする HTML
12
…<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body>
<img src="logo.gif"><br /><form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>"
method="post"> <input type="submit" name="push" id="push" value="ボタンを押す ">
</form><br /><hr />2010 kurukuru labs.
</body></html>
13
一定間隔でデータを確認ActionScript 3.0
14
package {
import flash.display.MovieClip;import flash.events.Event;import flash.net.URLLoader;import flash.net.URLRequest;import flash.utils.Timer;import flash.events.TimerEvent;
import funnel.*;
public class Pochitto extends MovieClip{
private var _timer:Timer;private var _gio:Gainer;private const _D_OUT_1:int = 12;
public function Pochitto() {
_gio = new Gainer();_gio.addEventListener(FunnelEvent.READY, trace);_gio.addEventListener(FunnelEvent.READY, _gioReadyHandler);_gio.addEventListener(FunnelErrorEvent.REBOOT_ERROR, trace);_gio.addEventListener(FunnelErrorEvent.CONFIGURATION_ERROR, trace);_gio.addEventListener(FunnelErrorEvent.ERROR, trace);
}
private function _gioReadyHandler(e:FunnelEvent):void {
_gio.digitalOutput(0).value = 0;_timer = new Timer(1000, 0);_timer.addEventListener(TimerEvent.TIMER,_timerHandler);_timer.start();
}
private function _timerHandler(e:TimerEvent):void {
var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, _completeHandler);urlLoader.load(new URLRequest("http://www.yourserver.com/getStatus.php?" +
Math.random()));}
private function _completeHandler(e:Event):void {
var status:Number = Number(URLLoader(e.target).data);trace("status : " + status);if (status == 1) {
_gio.digitalOutput(0).value = 1;}
}
}
}
15
Flashから PHPにアクセスActionScript 3.0
16
public class Pochitto extends MovieClip{
private var _timer:Timer;
public function Pochitto() {
_gio = new Gainer(); _gio.addEventListener(FunnelEvent.READY, _gioReadyHandler);
}
private function _gioReadyHandler(e:FunnelEvent):void {
_gio.digitalOutput(0).value = 0;_timer = new Timer(1000, 0);_timer.addEventListener(TimerEvent.TIMER,_timerHandler);_timer.start();
}
private function _timerHandler(e:TimerEvent):void {
var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, _completeHandler);//キャッシュ対策のため、パラメタにランダムな値を入れるurlLoader.load(new URLRequest("http://www.yourserver.com/getStatus.php?" + Math.random()));
}
private function _completeHandler(e:Event):void {
var status:Number = Number(URLLoader(e.target).data);if (status == 1) {
_gio.digitalOutput(0).value = 1;}
}
}
Flashからアクセスする PHP
17
<?php//読み込み$status = 0;$fp = fopen("status.dat", "r");while ($line = fgets($fp)) {
$status = $line;}
fclose($fp);
//ファイルをリセット$fp = fopen("status.dat", "w");fwrite($fp, "0");fclose($fp);
echo $status;?>
18
Gainerと接続
19
package {
import funnel.*;
public class Pochitto extends MovieClip{
private const _DT:Number = 1000;//1秒 (1000ミリ秒毎 )private const STATUS_URL:String = "http://www.yourserver.com/getStatus.php";private var _timer:Timer;private var _gio:Gainer;private const _D_OUT_1:int = 12;
//コンストラクターpublic function Pochitto() {
//インスタンス化_gio = new Gainer();_gio.addEventListener(FunnelEvent.READY, trace);_gio.addEventListener(FunnelEvent.READY, _gioReadyHandler);_gio.addEventListener(FunnelErrorEvent.REBOOT_ERROR, trace);_gio.addEventListener(FunnelErrorEvent.CONFIGURATION_ERROR, trace);_gio.addEventListener(FunnelErrorEvent.ERROR, trace);
}
//準備ができたら実行private function _gioReadyHandler(e:FunnelEvent):void {
_gio.digitalOutput(0).value = 0;_timer = new Timer(_DT, 0);_timer.addEventListener(TimerEvent.TIMER,_timerHandler);_timer.start();
}
}
}
20
Gainerに命令
Gainerに命令
21
//読み込みコンプリートハンドラーprivate function _completeHandler(e:Event):void {
var status:Number = Number(URLLoader(e.target).data);trace("status : " + status);if (status == 1) {
_gio.digitalOutput(0).value = 1;}
}
22
ありがとうございました。
あっ!本買ってください。
23