Flashから文字列送って、Arduino側でプログラム動作のコントロールが出来るかなと思い、
Flash側のライブラリ(as3glue)を見ても、それらしきメソッドが見当たらない。オレが見つけられてないだけか。。。
ということで、as3glue内のArduino.asに手を加えて、Arduinoへ文字列を送るようにしてみた。
最初、文字列をAsciiコードに変換して、一文字ずつ送信して、最後にnull文字送る必要があるようなんだが、
これに気づくのにかなり手間取ってしまった。
以下、Arduino.as に追加したコード。
文字列をAsciiコードに変換するメソッドと、ArduinoへそのAsciiコードを送るメソッドを追加。
//---------------------------------------
// ORIGINAL FUNCTIONS
//---------------------------------------
public function sendStringToArduino(str:String):void{
var asciiArray:Array = stringToAsciiArray(str);
writeByte(ARD_SYSEX_MESSAGE_START);
writeByte(ARD_SYSEX_STRING);
for each(var asciiCode:int in asciiArray){
writeByte(asciiCode);
}
writeByte(ARD_SYSEX_MESSAGE_END);
flush();
}
private function stringToAsciiArray(str:String):Array{
var asciiArray:Array = new Array();
for(var i:int = 0; i<str.length; i++){
asciiArray.push(str.charCodeAt(i));
asciiArray.push(0);
}
asciiArray.push(0);
asciiArray.push(0);
return asciiArray;
}
ちなみに、Arduino側には以下コードを追加して、受け取った文字列をそのままFlashへ返すようにしてテストしてみた。
setup()関数内に、下記コードを追加。
リファレンスのページでは、コールバック呼び出すメッセージとして、FIRMATA_STRINGとあるが、ソースコード見てみると、STRING_DATAになってる。FIRMATA_STRINGでも動くっぽいけど。
Firmata.attach(STRING_DATA, stringCallback);
で、stringCallbackは以下。
void stringCallback(char *myString)
{
Firmata.sendString(myString);
}
後になって、文字列送ってどうすんの?制御コードとか決めて数値送ればいいじゃん、とか思ってしまったが、まぁ、送ってみたかったという動機で充分か。

