Arduino
Flashで電子工作(windows)
Flashは、シリアル通信がサポートされていないので、
通常は外部の基盤と接続できません。
そこで、FlashはxmlSocketでserproxy.exeに対してメッセージを送り、
serproxy.exeはシリアル通信でarduino基盤に接続させます。
Flashでボタンを押すとLEDが点灯して、
スイッチを押すとFlashで表示が変わるものを作ります。
用意するものと、回路はここと同じ。
接続手順
1.arduino基盤に、flas_and_arduinoフォルダのソースを書き込む
2.serproxyフォルダのserproxy.exeを起動
3.Flashのソースでは、環境に合わせて、ポート番号を変える必要がある。
flashフォルダのarduino.flaを開き、5行目を変更する。
テストした環境では、COM4に接続するので、上の例では、5334にしてある。
var port:Number = 5334;
4.Flashを起動する。
5.Flash上の「LEDボタン」を押せば、LEDが点灯、
基盤のスイッチを押せば、Flashの表示が変わる。
ソース解説
■arduinoソース
int lastSwitchState = 0; // スイッチの状態
int inPutPin = 2; // スイッチ用のピン
int ledPin = 13; // ledに使うピン
void setup() {
Serial.begin(9600);
pinMode(inPutPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop () {
// スイッチ
int switchState = digitalRead(inPutPin);
// スイッチの状態が変わった
if (switchState != lastSwitchState) {
if (switchState == HIGH){
sendStringToFlash("on");
}
else {
sendStringToFlash("off");
}
// スイッチの現在の状態をバックアップ
lastSwitchState = switchState;
}
// LED
// シリアルのからデータがきているか
if(Serial.available() > 0) {
int flashCommand = Serial.read();
flashCommand -= 48; // アスキーデータを数値に変換
if(flashCommand == 0){
digitalWrite(ledPin, LOW);
}else if(flashCommand == 1){
digitalWrite(ledPin, HIGH);
}
}
delay(50);
}
// Flashに対して、文字列を送信する
void sendStringToFlash (char *s) {
while (*s) {
printByte(*s++);
}
printByte(0);
}
Flashにデータを送るには、最後に定義してあるsendStringToFlash関数を使う。
文字を引数にすると、xmlSocketデータを送信する。
ボタンが押されると、"on"を送信するようにした。
Flashから、データが来たか知るには、Serial.available()で判定する。
アスキーコードで送ってくるので、-48を引いて数字に変換する。
flashCommand -= 48;
送られてきたデータが、0のときはLEDを消す。
if(flashCommand == 0){
digitalWrite(ledPin, LOW);
}
■Flashのソース
import 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 == "on") {
_root.showMc.onFunc();
}
else if (msg == "off") {
_root.showMc.offFunc();
}
}
// リスナー登録
arduino.addEventListener("onReceiveData", listenObj);
// arduinoに送信
function sendData(data){
arduino.send(data);
}
Flashをパブリッシュしたときには、接続ができるのだが、swfファイルからだと、serproxyに接続ができなかった。とりあえず、スタンドアローンexeで接続が確認できた。