In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

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しました。
Get Adobe Flash player
by agenda23 30 Jun 2010
/**
 * 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);
        }
        */
        }

    }