2007年06月06日
Arduino
Flashに3軸加速度センサーをつなぐ
今回は、3軸加速度センサーKXM52−1050を使います。
今までのセンサーと違い、Flashに送る値が3つに増えるので、
最初のデータを送信する前にstartの文字を送ることにした。
void setup() {
Serial.begin(9600);
}
void loop() {
sendStringToFlash("start");
for(int i=0; i<3; i++){
int val = analogRead(i);
sendNumToFlash(val);
}
delay(100);
}
// Flashに対して、数値を送信する
void sendNumToFlash (int n) {
Serial.print(n);
printByte(0);
}
// Flashに対して、文字列を送信する
void sendStringToFlash (char *s) {
while (*s) {
printByte(*s++);
}
printByte(0);
}
Flashでも、グラフをつくってみることにした。
import flash.display.BitmapData;
import flash.geom.Rectangle;
//------------------
import Arduino;
//------------------ グラフパラメータ
var dataCount = 0; // x,y,zどのデータか
var back_data = new Array(); // 前のデータ
for(var i=0; i<3; i++) back_data[i] = 0;
var coMap = new Array(); // 線の色
coMap[0] = 0xFF0000;
coMap[1] = 0x00FF00;
coMap[2] = 0x0000FF;
//------------------ Arduino
// 環境に合わせて、ポートを設定する。
// COM1:5331、COM2:5332、COM3:5333、COM4:5334、COM5:5335、COM6:5336
var port:Number = 5334;
var arduino:Arduino = new Arduino(port);
listenObj = new Object();
// データを受信
listenObj.onReceiveData = function(evtObj:Object){
var msg = evtObj.data;
if(msg == "start"){ // データの始まり
dataCount = 0;
}else{ // 数値のデータ
var val = Number(msg)/2; // 値が大きいので、2で割る
// グラフ作成
drawGraf(dataCount, val);
dataCount ++;
}
}
// リスナー登録
arduino.addEventListener("onReceiveData", listenObj);
// -----------------------グラフ
var myBitmapData:BitmapData = new BitmapData(750, 512, false, 0xFFFFFF);
var mc_2:MovieClip = this.createEmptyMovieClip("mc2", this.getNextHighestDepth());
mc_2._x = -1; // 見えない位置で作画させるため、x座標を-1に
mc_1.attachBitmap(myBitmapData, this.getNextHighestDepth());
function drawGraf(no, n){
drawLine(Math.floor(512 - back_data[no]), Math.floor(512 - n), coMap[no]);
back_data[no] = n; // データバックアップ
if(no >= 2){ // グラフをビットマップに作画
myBitmapData.draw(mc_2);
mc_2.clear();
myBitmapData.scroll(1, 0);
myBitmapData.fillRect(new Rectangle(0, 0, 1, 512), 0xffffff);
}
}
// 線を引く
function drawLine(y0, y1, color){
mc_2.lineStyle(1, color);
mc_2.moveTo(0, y0);
mc_2.lineTo(1, y1);
}