forked from: Arduino WiiNunchuck Demo
forked from Arduino WiiNunchuck Demo (diff: 51)
A simple example of how to connect a Wii Nunchuck to an Arduino board via a WiiChuck adapter You have to upload Firmata/I2CFirmata (included in Arduino 0017) in prior to run this example Reference http://todbot.com/blog/2008/02/18/wiichuck-wii-nunchuck-adapter-available/ Hardware http://www.switch-science.com/products/detail.php?product_id=221 http://store.fungizmos.com/index.php?main_page=product_info&cPath=69&products_id=212 http://www.sparkfun.com/commerce/product_info.php?products_id=9281
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/xp9Au
*/
// forked from kotobuki's Arduino WiiNunchuck Demo
// A simple example of how to connect a Wii Nunchuck to
// an Arduino board via a WiiChuck adapter
//
// You have to upload Firmata/I2CFirmata (included in Arduino 0017)
// in prior to run this example
//
// Reference
// http://todbot.com/blog/2008/02/18/wiichuck-wii-nunchuck-adapter-available/
//
// Hardware
// http://www.switch-science.com/products/detail.php?product_id=221
// http://store.fungizmos.com/index.php?main_page=product_info&cPath=69&products_id=212
// http://www.sparkfun.com/commerce/product_info.php?products_id=9281
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.utils.getTimer;
import org.papervision3d.cameras.*;
import org.papervision3d.materials.*;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.*;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.scenes.*;
import org.papervision3d.view.*;
import funnel.*;
import funnel.gui.OnScreenController;
import funnel.i2c.*;
[SWF(backgroundColor="0x808080")]
public class ArduinoI2CTest_Nunchuck extends BasicView {
private var aio:Arduino;
private var nunchuck:WiiNunchuck;
private var joystickX:OnScreenController;
private var joystickY:OnScreenController;
private var accelX:OnScreenController;
private var accelY:OnScreenController;
private var accelZ:OnScreenController;
private var zButton:OnScreenController;
private var cButton:OnScreenController;
// 立方体
private var cube:Cube;
public function ArduinoI2CTest_Nunchuck() {
var config:Configuration = Arduino.FIRMATA;
config.enablePowerPins();
aio = new Arduino(config);
aio.addEventListener(FunnelEvent.I2C_POWER_PINS_READY, onI2CPowerPinsReady);
createGUI();
// 立方体のためのマテリアルを準備
var materialsList:MaterialsList = new MaterialsList();
materialsList.addMaterial(new ColorMaterial(0xFF0000), "front");
materialsList.addMaterial(new ColorMaterial(0x00FF00), "back");
materialsList.addMaterial(new ColorMaterial(0x0000FF), "right");
materialsList.addMaterial(new ColorMaterial(0xFFFF00), "left");
materialsList.addMaterial(new ColorMaterial(0xFF00FF), "top");
materialsList.addMaterial(new ColorMaterial(0x00FFFF), "bottom");
// 立方体のインスタンスを生成
cube = new Cube(materialsList, 200, 200, 200);
scene.addChild(cube);
// カメラをセット
camera.x = 0;
camera.y = 0;
camera.z = -500;
camera.focus = 500;
camera.zoom = 1;
// レンダリング開始
startRendering();
}
private function onI2CPowerPinsReady(event:Event):void {
nunchuck = new WiiNunchuck(aio);
nunchuck.addEventListener(Event.CHANGE, onChange);
addEventListener(Event.ENTER_FRAME, loop);
}
private function loop(event:Event):void {
}
private function onChange(e:Event):void {
joystickX.value = nunchuck.joystickX;
joystickY.value = nunchuck.joystickY;
accelX.value = nunchuck.x;
accelY.value = nunchuck.y;
accelZ.value = nunchuck.z;
cButton.value = nunchuck.cButton;
zButton.value = nunchuck.zButton;
}
override protected function onRenderTick(event:Event = null):void {
// 立方体の角度をセット
var sensorX:Number = Math.max(Math.min(nunchuck.x, 1), -1);
var sensorY:Number = Math.max(Math.min(nunchuck.y, 1), -1);
cube.rotationZ = Math.asin(-sensorX) / Math.PI * 180;;
cube.rotationX = Math.asin(sensorY) / Math.PI * 180;;
// シーンをレンダリング
renderer.renderScene(scene, camera, viewport);
}
private function createGUI():void {
joystickX = new OnScreenController("Joy X", 128, OnScreenController.ANALOG, false, -1, 1);
joystickX.y = 0;
addChild(joystickX);
joystickY = new OnScreenController("Joy Y", 128, OnScreenController.ANALOG, false, -1, 1);
joystickY.y = 20;
addChild(joystickY);
accelX = new OnScreenController("Accel X", 128, OnScreenController.ANALOG, false, -1, 1);
accelX.y = 40;
addChild(accelX);
accelY = new OnScreenController("Accel Y", 128, OnScreenController.ANALOG, false, -1, 1);
accelY.y = 60;
addChild(accelY);
accelZ = new OnScreenController("Accel Z", 128, OnScreenController.ANALOG, false, -1, 1);
accelZ.y = 80;
addChild(accelZ);
cButton = new OnScreenController("C", 58, OnScreenController.DIGITAL_TOGGLE, false);
cButton.y = 100;
addChild(cButton);
zButton = new OnScreenController("Z", 58, OnScreenController.DIGITAL_TOGGLE, false);
zButton.y = 120;
addChild(zButton);
}
}
}
