japaninoと測距センサで球体に気のエネルギーを送ってる感じのテスト1
japaninoと測距センサで球体に気のエネルギーを送ってる感じのテスト1
author : agenda23
attention : standardfirmata使用
japaninoとかarduinoとかがないとつまんないだろうな。
usage : japaninoと測距センサを二つ用意してjapaninoのアナログ入力0と2にそれぞれの出力をつなぐ。
再生して球体が表示されたらおもむろに測距センサに手などをかざしてみる。
それぞれがX軸、Y軸の回転速度に影響し、めっちゃ早く回転したりする。
操作中は怪しいひとにしか見えない。
測距センサでなく可変抵抗などでもそこそこたのしいはず。
センサ
http://akizukidenshi.com/catalog/g/gI-02551/
操作デモ動画うpしました。
/**
* Copyright agenda23 ( http://wonderfl.net/user/agenda23 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/8QVy
*/
/*
japaninoと測距センサで球体に気のエネルギーを送ってる感じのテスト1
author : agenda23
attention : standardfirmata使用
japaninoとかarduinoとかがないとつまんないだろうな。
usage : japaninoと測距センサを二つ用意してjapaninoのアナログ入力0と2にそれぞれの出力をつなぐ。
再生して球体が表示されたらおもむろに測距センサに手などをかざしてみる。
それぞれがX軸、Y軸の回転速度に影響し、めっちゃ早く回転したりする。
操作中は怪しいひとにしか見えない。
測距センサでなく可変抵抗などでもそこそこたのしいはず。
センサ
http://akizukidenshi.com/catalog/g/gI-02551/
操作デモ動画うpしました。
*/
package
{
import flash.display.*;
import flash.events.*;
import flash.text.*;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.materials.*;
import org.papervision3d.materials.special.CompositeMaterial;
import caurina.transitions.*;
import net.hires.debug.Stats;
import funnel.*;
import funnel.ui.LED;
[SWF(backgroundColor=0x000000)]
public class PV1 extends Sprite
{
private var scene:Scene3D;
private var viewport:Viewport3D;
private var camera:Camera3D;
private var renderer:BasicRenderEngine;
private var objPlane:Sphere;
private var isTween:Boolean;
private var _japanino:Arduino;
private var pin0:Pin;
private var pin2:Pin;
private var pin0_tf:TextField;
private var pin2_tf:TextField;
public function PV1()
{
/*
*
* japanino 初期化
*
*/
//configを用意
var config:Configuration = Arduino.FIRMATA;
//7〜13番PINをデジタル出力に設定
for (var i:int = 7; i <= 13; i++)
{
config.setDigitalPinMode(i, Pin.DOUT);
}
//Japanino生成
_japanino = new Arduino(config);
_japanino.addEventListener(FunnelEvent.READY, onFunnelReady);
//各アナログ入力アクティブ時イベント登録
pin0 = _japanino.analogPin(0);
pin0.addFilter(new Scaler(0, 6, 0, 255, Scaler.LINEAR, true));
pin0.addFilter(new Convolution(Convolution.MOVING_AVERAGE));
pin0.addEventListener(PinEvent.CHANGE, pin0_change);
pin2 = _japanino.analogPin(2);
pin2.addFilter(new Scaler(0, 6, 0, 255, Scaler.LINEAR, true));
pin2.addFilter(new Convolution(Convolution.MOVING_AVERAGE));
pin2.addEventListener(PinEvent.CHANGE, pin2_change);
/*
*
* pv3d 初期化
*
*/
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.quality = StageQuality.LOW;
init3D();
//テキストフィールド生成
pin0_tf = new TextField();
pin2_tf = new TextField();
addChild(pin0_tf);
addChild(pin2_tf);
//テキストフィールド設定
pin0_tf.x = 5;
pin0_tf.y = 120;
pin0_tf.textColor = 0x08FF10;
pin2_tf.x = 5;
pin2_tf.y = 135;
pin2_tf.textColor = 0x08FF10;
addChild(new Stats( { bg: 0x1A1A1A } ));
//クリックイベントリスナーはとりあえず不使用
//stage.addEventListener(MouseEvent.CLICK, clickObj);
}
private function init3D():void
{
viewport = new Viewport3D(0,0,true);
viewport.opaqueBackground = 0x000000;
addChild(viewport);
renderer = new BasicRenderEngine();
camera = new Camera3D();
camera.z = -300;
camera.focus = 500;
camera.zoom = 1;
scene = new Scene3D();
var colorMat:ColorMaterial = new ColorMaterial( 0x000000, 1 );
var wireMat:WireframeMaterial = new WireframeMaterial( 0x08FF10 );
var compoMat:CompositeMaterial = new CompositeMaterial();
compoMat.addMaterial(colorMat);
compoMat.addMaterial(wireMat);
compoMat.doubleSided = true;
objPlane = new Sphere(compoMat, 80, 16, 16 );
scene.addChild(objPlane);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onFunnelReady(evt:FunnelEvent):void
{
//japaninoとの接続が完了し、準備ができました。
_japanino.removeEventListener(FunnelEvent.READY, onFunnelReady);
}
private function onEnterFrame(event:Event):void
{
// objPlane.rotationY += 2;
// objPlane.rotationY = stage.mouseX + Math.round((Pin(_japanino.analogPin(2)).value)*1000)/100;
// objPlane.rotationX = stage.mouseY + Math.round((Pin(_japanino.analogPin(0)).value)*1000)/100;
objPlane.rotationY += Math.round((Pin(_japanino.analogPin(2)).value)*100)/100;
objPlane.rotationX += Math.round((Pin(_japanino.analogPin(0)).value)*100)/100;
objPlane.rotationZ += 1;
renderer.renderScene(scene,camera,viewport);
}
private function pin0_change(evt:PinEvent):void
{
pin0_tf.text = "pin0 : " + Math.round((Pin(_japanino.analogPin(0)).value)*100)/100;
}
private function pin2_change(evt:PinEvent):void
{
pin2_tf.text = "pin2 : " + Math.round((Pin(_japanino.analogPin(2)).value)*100)/100;
}
/* クリックイベントはとりあえず不使用
private function clickObj (e:MouseEvent):void {
var num:Number = 1;
for each(var i:* in objPlane.geometry.vertices) {
if(num%12 == 0) {
if(isTween) {
Tweener.addTween(i, { x:i.x*0.5,
y:i.y*0.5,
z:i.z*0.5,
time:0.5,
delay:0,
transition:"easeInOutElastic"
});
} else {
Tweener.addTween(i, { x:i.x*2,
y:i.y*2,
z:i.z*2,
time:1,
delay:Math.random(),
transition:"easeInOutElastic"
});
}
}
num++;
}
isTween = !isTween;
renderer.renderScene(scene,camera,viewport);
}
*/
}
}