FIO Basic Example: Accelerometer

by kotobuki forked from FIO Basic Example: SignalScope (diff: 41)
A basic accelerometer example for FIO modules
Reference
http://funnel.cc/Software/ActionScript3
http://funnel.cc/Hardware/FIO
♥0 | Line 54 | Modified 2009-08-09 14:30:29 | MIT License
play

ActionScript3 source code

/**
 * Copyright kotobuki ( http://wonderfl.net/user/kotobuki )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/hyP5
 */

// forked from kotobuki's FIO Basic Example: SignalScope
// forked from kotobuki's Gainer Basic Example: SignalScope
// A basic accelerometer example for FIO modules
// 
// Reference
// http://funnel.cc/Software/ActionScript3
// http://funnel.cc/Hardware/FIO

package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.*
    
    import funnel.*;
    import funnel.gui.*;

    [SWF(backgroundColor="0x808080")]

    public class GainerTest extends Sprite {
        private const NUM_CHANNELS:int = 3;

        private var fioSystem:Fio;
        private var fio:IOModule;
        private var scopes:Array;
        private var textField:TextField;

        public function GainerTest() {
            var config:Configuration = Fio.FIRMATA;

            // set unused analog pins output to improve performance
            config.setDigitalPinMode(17, OUT);
            config.setDigitalPinMode(18, OUT);
            config.setDigitalPinMode(19, OUT);
            config.setDigitalPinMode(20, OUT);
            config.setDigitalPinMode(21, OUT);
            fioSystem = new Fio([1], config);
            fio = fioSystem.ioModule(1);

            scopes = new Array(NUM_CHANNELS);
            for (var i:int = 0; i < NUM_CHANNELS; i++) {
                scopes[i] = new SignalScope(0, 0 + (53 * i), 200, "A" + i, 0, 2);
                addChild(scopes[i]);
            }

            fio.analogPin(0).addFilter(new SetPoint([[0.4, 0.05], [0.6, 0.05]]));
            fio.analogPin(1).addFilter(new SetPoint([[0.4, 0.05], [0.6, 0.05]]));
            fio.analogPin(2).addFilter(new SetPoint([[0.4, 0.05], [0.6, 0.05]]));

            fio.analogPin(0).addEventListener(CHANGE, onChange);
            fio.analogPin(1).addEventListener(CHANGE, onChange);
            fio.analogPin(2).addEventListener(CHANGE, onChange);

            textField = new TextField();
            textField.y = 350;
            addChild(textField);
            
            addEventListener(Event.ENTER_FRAME, loop);
        }

        private function loop(event:Event):void {
            for (var i:int = 0; i < NUM_CHANNELS; i++) {
                scopes[i].update(fio.analogPin(i));
            }
        }

        private function onChange(event:Event):void {
            if ((fio.analogPin(2).value == 2) && (fio.analogPin(0).value == 1) && (fio.analogPin(1).value == 1)) {
                textField.text = "上向き水平";
            } else if ((fio.analogPin(2).value == 0) && (fio.analogPin(0).value == 1) && (fio.analogPin(1).value == 1)) {
                textField.text = "下向き水平";
            } else {
                textField.text = "";
            }
        }
    }
}