本帖最后由 桐桐 于 2012-5-18 09:18 编辑
以前arduino和flash的链接flash端都是as2编的,但是现在大家都用as3了,所以前段时间学习了一下arduino和flash的as3连接。
下面程序实现的功能是点击flash上的按钮,arduino上就会开始闪灯,并接受arduino上发来的数据。再点击flash上的按钮,闪灯结束,并接受arduino上发来的数据。
——————————————————————————————————————————————
首先放上Arduino端代码:- #define LED_PIN 13
- #define TOGGLE_LED_STATE 't' //定义一个来自Flash端的联系字符,随意定,与Flash端一样就可以
- #define EOL_DELIMITER "$" //定义一个发送字符结束标记,也随意定
- int incoming = 0; //定义一个变量,用于接收数据时用
- boolean shouldBlinkLED = false; //是否闪灯值,初始为不闪
- void setup()
- {
- Serial.begin(9600);
- Serial.print("INITIALIZING"); //连接上电脑时发送一个字符串
- Serial.print(EOL_DELIMITER);
- pinMode(LED_PIN, OUTPUT);
- blinkLED(5); //arduino刚连上电脑时闪灯5下
- Serial.print("READY"); //发送“ready”到电脑端
- Serial.print(EOL_DELIMITER);
- }
- void loop()
- {
- if(shouldBlinkLED) //如果闪灯,就闪灯一下
- {
- blinkLED(1);
- }
- if(Serial.available() > 0) //如果arduino接受到电脑端来的字符
- {
- incoming = Serial.read(); //变量incoming就等于受到的字符
- if(incoming == TOGGLE_LED_STATE) //假如收到的字符与定义的字符相同
- {
- shouldBlinkLED = !shouldBlinkLED;//转变闪灯值,如果闪灯就变不闪,不然相反
- Serial.print("LED BLINK STATE: "); //同时发送字符串"led blink state:"
- if(shouldBlinkLED) //假如正在闪,发“on”
- {
- Serial.print("ON");
- }
- else
- {
- Serial.print("OFF"); //否则发"off"
- }
- Serial.print(EOL_DELIMITER);
- }
- }
- }
- //下面是闪灯程序,这就不解释了
- void blinkLED(int count)
- { for(int i = 0; i < count; i++)
- {
- digitalWrite(LED_PIN, HIGH);
- delay(500);
- digitalWrite(LED_PIN, LOW);
- delay(500);
- }
- }
复制代码 ————————————————————————————————————————————————
下面是Flash端代码,建一个FlashBlink.as文件- package
- {
- import flash.events.Event;
- import flash.display.Sprite;
- import flash.net.Socket;
- import flash.events.IOErrorEvent;
- import flash.events.ProgressEvent;
- import flash.events.SecurityErrorEvent;
- import flash.utils.Endian;
- import flash.events.MouseEvent;
- public class FlashBlink extends Sprite
- { private static const TOGGLE_LED_STATE:String = "t";//定义一个与arduino联系字符
- private static const EOL_DELIMITER:String = "$";//定义一个结束字符,注意与arduino上一样
- private var _socket:Socket;
- private var _proxyAddress:String = "127.0.0.1";
- private var _proxyPort:uint = 5333;
- public function FlashBlink()
- {
- addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
- }
- //下面代码是在画一个方块按钮,并且定义点击按钮时运行程序onclick
- private function onAddedToStage(event:Event):void
- {
- removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
- var s:Sprite = new Sprite();
- s.graphics.beginFill(0x00FF00);
- s.graphics.drawRect(0,0, 200,100);
- s.graphics.endFill();
- addChild(s);
- s.x = 50;
- s.y = 50;
- s.addEventListener(MouseEvent.CLICK, onClick);//点击时运行onclick程序 //下面的程序是与arduino建立连接,如果连接上了怎么样,如果断了怎么样等等
- _socket = new Socket();
- _socket.addEventListener( Event.CONNECT, onConnect );
- _socket.addEventListener( Event.CLOSE, onClose );
- _socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData );
- _socket.addEventListener( IOErrorEvent.IO_ERROR, onIOError );
- _socket.addEventListener( SecurityErrorEvent.SECURITY_ERROR, onSecurityError );
- _socket.endian = Endian.LITTLE_ENDIAN;
- _socket.connect(_proxyAddress, _proxyPort);
- }
- //连接上了执行
- private function onConnect(event:Event):void
- {
- trace("Socket Connected");//连接上就发送一个消息
- }
- private var buffer:String = "";//定义一个字符串缓存字符
- //下面程序师接受来自arduino的数据,一个字母一个字母接收的
- private function onSocketData(event:ProgressEvent):void
- {
- var data:String = _socket.readUTFBytes( _socket.bytesAvailable );
- buffer += data;
- var msg:String;
- var index:int;
- //下面是把接受到的字符拼起来
- while((index = buffer.indexOf(EOL_DELIMITER)) > -1)
- {
- msg = buffer.substring(0, index);
- buffer = buffer.substring(index + 1);
- trace("Message Received from Arduino : " + msg);
- }
- }
- //下面就是onclick程序,就是点击按钮时要做的
- private function onClick(event:MouseEvent):void
- {
- trace("onClick");
- if(!_socket.connected) //假如没有连接上,发送你要连什么的
- {
- trace("You must be connected to send a command to the Arduino.");
- return;
- }
- _socket.writeUTFBytes(TOGGLE_LED_STATE);//如果没有不连接上,就发联系字符给arduino
- _socket.flush();//发送
- }
- //下面定义关掉arduino时,显示Socket Closed
- private function onClose(event:Event):void
- {
- trace("Socket Closed");
- }
- //下面是出错时显示的消息的
- private function onIOError(event:IOErrorEvent):void
- {
- trace("IOErrorEvent : " + event.text);
- }
- //下面也是出错时的
- private function onSecurityError(event:SecurityErrorEvent):void
- {
- trace("SecurityErrorEvent : " + event.text);
- }
- }
-
- }
复制代码 |