Pages

Subscribe:

Ads 468x60px

Labels

2013年5月27日 星期一

Arduino 與Flash 按鈕互動

用 Flash 上的兩個按鈕來控制連接在 Arduino 上的兩顆 LED,當 Flash 的綠色按鈕被按住時,接在 Arduino pin 12 的綠色 LED 就保持亮的狀態,按鈕放開後就熄滅,而 Flash 的紅色按鈕則以同樣的方式來控制接在 Arduino pin 13 上的紅色 LED。

1.設定 serproxy

2.Arduino配置
將紅色 LED 接在 pin 13,而綠色 LED 則是接在 pin 12
Arduino 程式碼

假設當我們在 Flash 中按下綠色按鈕時會送出「G:1」,放開按鈕時會送出「G:0」;而按下紅色按鈕時會送出「R:1」,放開按鈕時會送出「R:0」。serproxy 經由 socket server 收到後,會將字串送往串列埠。Arduino 中接收串列埠資料的函數有以下幾個:

  • Serial.read()
  • Serial.readBytes()
  • Serial.readBytesUntil()

Flash 送給 socket server 的字串都會以 0x00 來結束,我們利用 Serial.readBytesUntil() 就可以讓它用 0x00 來判斷資料是否讀取完畢了。以下是 Arduino 的程式碼:

#define bufferSize   16
#define greenLedPin  12
#define redLedPin    13
void setup() {
  pinMode(greenLedPin, OUTPUT); // declare the greenLedPin as an OUTPUT
  pinMode(redLedPin, OUTPUT); // declare the redLedPin as an OUTPUT
  Serial.begin(115200);
}
void loop() {
  while (Serial.available() > 0) {
    char inBuffer[bufferSize];
    int stringLength;
    stringLength = Serial.readBytesUntil('\0', inBuffer, bufferSize);
    if (stringLength > 0) {
      inBuffer[stringLength] = '\0';
      String inString = String(inBuffer);
      Serial.println(inString);
      if ( inString == "G:1" ) {
          digitalWrite(greenLedPin, HIGH);
      } else  if ( inString ==  "G:0" ) {
          digitalWrite(greenLedPin, LOW);
      } else  if ( inString == "R:1" ) {
          digitalWrite(redLedPin, HIGH);
      } else  if ( inString == "R:0" ) {
          digitalWrite(redLedPin, LOW);
      }
    }
  }
}
3.Flash

Flash 程式碼


Flash 的部份因為我是用 Flash 8 ,AS2 和新版的語法可能有些許不同。主要是利用 XMLSocket 來和 serproxy 所建立的 socket server 來通訊。使用兩個關鍵影格來完成任務。
影格一:

if(server == undefined) {
server = '127.0.0.1';
}
if(port == undefined || isNaN(Number(port))) {
port = 5334;
} else {
port = Number(port);
}

isConnected = false;
socket = new XMLSocket()
socket.onConnect = function(success) {
if (success) {
statusTxt.text = "conneted";
isConnected = true;
} else {
statusTxt.text = "connet failed!";
isConnected = false;
}
}
socket.onData = function(src) {
statusTxt.text =  "data : " + src;
}
socket.onClose = function() {
statusTxt.text = "disconneted";
isConnected = false;
}

主要內容說明如下:

  • socket.onConnect:設定連線成功(失敗)時要進行的動作。
  • socket.onData:設定資料接收完成要進行的動作。
  • socket.onClose:設定斷線後要進行的動作。


影格二:

stop();
infoTxt.text = "Server:" + server + "   Port:" + port;
socket.connect(server, port);
greenButton.onPress = function() {
if( isConnected ) {
socket.send("G:1");
};
}
greenButton.onRelease = function() {
if( isConnected ) {
socket.send("G:0");
};
}
redButton.onPress = function() {
if( isConnected ) {
socket.send("R:1");
};
}
redButton.onRelease = function() {
if( isConnected ) {
socket.send("R:0");
};
}

影格二主要是進行連線,並建立按鈕所要做的動作:

  • socket.connect(server, port):依指定的 IP 及 port (設定影格一)和 socket server 連線。
  • greenButton.onPress、greenButton.onRelease:設定綠色按鈕按下、放開時要進行的動作。
  • redButton.onPress、redButton.onRelease:設定紅色按鈕按下、放開時要進行的動作。

[注意] 由於 Flash 的安全管制,編譯完的 .swf 並無法在本機執行,記得要修改「受信任的位置設定」,將 .swf 的位置加入,不然,啟動 .swf 時只會看到「安全性」警語而無法正常動作。

以上是利用Flash Actionscript 2.0所完成

沒有留言:

張貼留言