Warning: opendir(/var/www/html/wp-content/mu-plugins): Failed to open directory: Permission denied in /var/www/html/wp-includes/load.php on line 981
그런데 여기서 재미있는 점은 as3-arduino-connector 가 단지 아두이노에서만 작동하는 ANE 가 아니라는 점입니다. 네이티브코드를 확인해보면 이 ANE 의 실제 구동방식은 COM 포트를 열고 데이터를 주고 받도록 되어있습니다. 이 말인즉슨 꼭 아두이노가 아니여도 COM 포트를 이용하는 각종 장비를 바로 플래시에서 사용 할 수 있게 된다는 의미입니다.
위의 이미지는 제 PC의 장치관리자 입니다. COM4, COM5 에 각각 USB Serial Port 가 잡혀 있는 것을 확인 할 수 있습니다. COM4 는 현재 RFID 리더 장비가 연결되어 있고 COM5 에는 아두이노가 연결 되어 있습니다. 이렇게 연결된 장비에 아래의 코드와 같은 방식으로 데이터를 주고 받을 수 있습니다.
[as3]
package
{
import com.bit101.components.*;
import com.bit101.utils.MinimalConfigurator;
import com.quetwo.Arduino.ArduinoConnector;
import com.quetwo.Arduino.ArduinoConnectorEvent;
import flash.display.Sprite;
import flash.events.MouseEvent;
import net.eriksjodin.arduino.Arduino;
public class ArduinoConnectorTester extends Sprite
{
private var _configure:XML = <comps>
<Panel x="10" y="10" width="230" height="120">
<Label text="Arduino Connector" x="10" y="10"/>
<PushButton id="connectArduino" label="Connect" x="60" y="40"/>
<PushButton id="turnOn" label="Turn ON" x="60" y="80"/>
</Panel>
<Panel x="260" y="10" width="230" height="120">
<Label text="RFID Connector" x="10" y="10"/>
<PushButton id="connectRFID" label="Connect" x="60" y="40"/>
</Panel>
<TextArea id="output" x="10" y="140" width="480" height="210"/>
</comps>;
public var connectArduino:PushButton;
public var turnOn:PushButton;
public var connectRFID:PushButton;
public var output:TextArea;
private var _config:MinimalConfigurator;
private var _isConnectedArduino:Boolean = false;
private var _isTurnedOn:Boolean = false;
private var _isConnectedRFID:Boolean = false;
private var _arduino:Arduino;
private var _rfid:ArduinoConnector;
public function ArduinoConnectorTester()
{
Component.initStage(stage);
_config = new MinimalConfigurator(this);
_config.parseXML(_configure);
connectArduino.addEventListener(MouseEvent.CLICK, onClickArduino);
turnOn.addEventListener(MouseEvent.CLICK, onClickTurnOn);
connectRFID.addEventListener(MouseEvent.CLICK, onClickRFID);
}
protected function onClickArduino(event:MouseEvent):void
{
if(_isConnectedArduino){
_arduino.dispose();
_arduino = null;
connectArduino.label = "Connect";
log("===> disconnect arduino");
} else {
_arduino = new Arduino("COM5", 57600);
connectArduino.label = "Disconnect";
log("===> connect arduino");
}
_isConnectedArduino = !_isConnectedArduino;
}
protected function onClickTurnOn(event:MouseEvent):void
{
if(_isConnectedArduino){
if(_isTurnedOn){
_arduino.writeDigitalPin(11, Arduino.LOW);
turnOn.label = "Turn ON";
log("turn off pin11");
} else {
_arduino.writeDigitalPin(11, Arduino.HIGH);
turnOn.label = "Turn OFF";
log("turn on pin11");
}
_isTurnedOn = !_isTurnedOn;
}
}
protected function onClickRFID(event:MouseEvent):void
{
if(_isConnectedRFID){
_rfid.dispose();
_rfid = null;
connectRFID.label = "Connect";
log("===> disconnect rfid");
} else {
_rfid = new ArduinoConnector();
_rfid.connect("COM4", 9600);
connectRFID.label = "Disconnect";
_rfid.addEventListener("socketData", onDataRFID);
log("===> connect rfid");
}
_isConnectedRFID = !_isConnectedRFID;
}
protected function onDataRFID(event:ArduinoConnectorEvent):void
{
log(_rfid.readBytesAsString());
}
private function log($message:*, $prop:*="", $tap:String=""):void
{
if($message is String || $message is Number){
if($prop==""){
output.text += $message + "n";
} else {
output.text += $tap + $prop+" : "+$message + "n";
}
} else if ($message is Object){
for(var prop:* in $message){
log($message[prop], prop, $tap+" – ");
}
}
}
}
}
[/as3]
코드는 워낙 단순하니 따로 설명을 하진 않겠습니다. 주의해야 할 점은 연결해야 할 장비가 작동하는 baud 를 정확히 알아야 합니다. 위의 경우 RFID 리더는 9600, 아두이노는 57600 으로 작동합니다.
이렇게 as3-arduino-connector 를 이용하면 시리얼포트를 이용 한 다양한 장비를 플래시에서 쉽게 제어 및 사용 할 수 있습니다. 이를 통해 더욱 멋진 인터렉티브 컨텐츠가 만들어 지길 기대해 봅니다.
]]>