本帖最后由 宁静以致远 于 2014-4-28 20:02 编辑
本人想通过Flash cs6做上位机程序,用来控制arduino的4个led,但是Flash中有发送数据,因为每点击4个按钮都有在串口通信的TX led灯会闪烁一下。大神看下神马问题
//////////////////////////////////////Flash段代码///////////////////////////////- import flash.events.IOErrorEvent;
- import flash.events.ProgressEvent;
- import flash.events.SecurityErrorEvent;
- import flash.utils.Endian;
- import flash.events.MouseEvent;
- import flash.text.*;
- import flash.text.TextFieldAutoSize;
- public class flashToLED extends Sprite
- {
- private static const lianxia:String = "aa";//定义一个与arduino联系字符
- private static const lianxib:String = "bb";//定义一个与arduino联系字符
- private static const lianxic:String = "cc";//定义一个与arduino联系字符
- private static const lianxid:String = "dd";//定义一个与arduino联系字符
- private static const dataover:String = "$$$$";//定义一个结束字符,注意与arduino上一样
- private var _socket:Socket;
- private var _proxyAddress:String = "127.0.0.1";
- private var _proxyPort:uint = 5333;
- var xsarduinotime:TextField = new TextField();//新建一个名为xsarduinotime的文本框
- //gettime主程序
- public function flashToLED()
- {
- addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); //侦听类是否被添加到舞台,每次添加时运行onAddedToStage
- }
- private function onAddedToStage(event:Event):void
- {
- removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); //移除侦听
- ///////////////////////按钮绘制 /////////////////////////////////
- var a:Sprite = new Sprite();
- a.graphics.beginFill(0x00FF00);
- a.graphics.drawRect(0,0, 50,10);
- a.graphics.endFill();
- addChild(a);
- a.x = 200;
- a.y = 200;
- var b:Sprite = new Sprite();
- b.graphics.beginFill(0x00FF00);
- b.graphics.drawRect(0,0, 50,10);
- b.graphics.endFill();
- addChild(b);
- b.x = 200;
- b.y = 200+40;
- var c:Sprite = new Sprite();
- c.graphics.beginFill(0x00FF00);
- c.graphics.drawRect(0,0, 50,10);
- c.graphics.endFill();
- addChild(c);
- c.x = 200;
- c.y = 200+80;
- var d:Sprite = new Sprite();
- d.graphics.beginFill(0x00FF00);
- d.graphics.drawRect(0,0, 50,10);
- d.graphics.endFill();
- addChild(d);
- d.x = 200;
- d.y = 200+120;
- //下面的程序是与arduino建立连接,如果连接上了怎么样,如果断了怎么样等等
- a.addEventListener(MouseEvent.CLICK, onClickA);
- b.addEventListener(MouseEvent.CLICK, onClickB);
- c.addEventListener(MouseEvent.CLICK, onClickC);
- d.addEventListener(MouseEvent.CLICK, onClickD);
- _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[img]http://www.arduino.cn/static/image/smiley/default/tongue.gif[/img]rogressEvent):void
- {
- var data:String = _socket.readUTFBytes( _socket.bytesAvailable );
- buffer += data;
- var msg:String;
- var index:int;
- //下面是把接受到的字符拼起来
- while((index = buffer.indexOf(dataover)) > -1)
- {
- msg = buffer.substring(0, index);
- buffer = buffer.substring(index + 1);
- trace("Message Received from Arduino : " + msg);
- xsarduinotime.width=400; //文本框的宽度200
- xsarduinotime.x=100; //文本框的位置
- xsarduinotime.y=10;
- xsarduinotime.text=msg; //显示time from arduino
- var format:TextFormat = new TextFormat(); //新建文字格式format
- format.size=24; //文字大小24
- xsarduinotime.setTextFormat(format); //将文字格式赋予xsarduinotime文本框
- addChild(xsarduinotime);
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //下面就是onclick程序,就是点击按钮时要做的
- private function onClickA(event:MouseEvent):void
- {
- trace("onClick-A");
- if(!_socket.connected) //假如没有连接上,发送你要连什么的
- {
- trace("You must be connected to send a command to the Arduino.");
- return;
- }
- //_socket.writeUTFBytes(lianxi);//如果连接上,就发联系字符给arduino
- _socket.writeUTFBytes(lianxia);
- _socket.flush();//发送
- }
- private function onClickB(event:MouseEvent):void
- {
- trace("onClick-B");
- if(!_socket.connected) //假如没有连接上,发送你要连什么的
- {
- trace("You must be connected to send a command to the Arduino.");
- return;
- }
- //_socket.writeUTFBytes(lianxi);//如果连接上,就发联系字符给arduino
- _socket.writeUTFBytes(lianxib);
- _socket.flush();//发送
- }
- //下面定义关掉arduino时,显示Socket Closed
- private function onClickC(event:MouseEvent):void
- {
- trace("onClick-C");
- if(!_socket.connected) //假如没有连接上,发送你要连什么的
- {
- trace("You must be connected to send a command to the Arduino.");
- return;
- }
- //_socket.writeUTFBytes(lianxi);//如果连接上,就发联系字符给arduino
- _socket.writeUTFBytes(lianxic);
- _socket.flush();//发送
- }
-
- private function onClickD(event:MouseEvent):void
- {
- trace("onClick-D");
- if(!_socket.connected) //假如没有连接上,发送你要连什么的
- {
- trace("You must be connected to send a command to the Arduino.");
- return;
- }
- //_socket.writeUTFBytes(lianxi);//如果连接上,就发联系字符给arduino
- _socket.writeUTFBytes(lianxid);
- _socket.flush();//发送
- }
- 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);
- }
- }
- }
复制代码 //////////////////////////////////////////////arduino段的代码、、、、、、、、、、、、、、、、、、、、、、、
[#define LED_PIN4 4
#define LED_PIN5 5
#define LED_PIN6 6
#define LED_PIN7 7
#define lianxia 'aa'
#define lianxib 'bb'
#define lianxic 'cc'
#define lianxid 'dd'
int a1=0;
int b1=0;
int c1=0;
int d1=0;
#define dataover "$" //定义一个发送字符结束标记,也随意定
char incoming ;
void setup()
{
pinMode(LED_PIN4, OUTPUT);
pinMode(LED_PIN5, OUTPUT);
pinMode(LED_PIN6, OUTPUT);
pinMode(LED_PIN7, OUTPUT);
//pinMode(LED_PIN, OUTPUT); //定义LED_PIN端口为输出端口
for(int i = 0; i < 1; i++) //接通电源后4个led分别闪下
{ digitalWrite(LED_PIN4, HIGH);
delay(500);
digitalWrite(LED_PIN4, LOW);
delay(500);
digitalWrite(LED_PIN5, HIGH);
delay(500);
digitalWrite(LED_PIN5, LOW);
delay(500);
digitalWrite(LED_PIN6, HIGH);
delay(500);
digitalWrite(LED_PIN6, LOW);
delay(500);
digitalWrite(LED_PIN7, HIGH);
delay(500);
digitalWrite(LED_PIN7, LOW);
delay(500);
}
Serial.begin(9600); //串口开始,波特率9600
Serial.print("Arduino to flash ready!"); //连接上电脑时发送一个字符串
Serial.print(dataover); //发送结束字符
}
void loop()
{
while(Serial.available() > 0)
{
incoming = Serial.read();
switch(incoming)
{
case lianxia : if(a1==0){
digitalWrite(LED_PIN4, HIGH);
a1=1;}
else{
digitalWrite(LED_PIN4, LOW);
a1=0;}
break;
case lianxib : if(b1==0){
digitalWrite(LED_PIN5, HIGH);
b1=1;}
else{
digitalWrite(LED_PIN5, LOW);
b1=0;}
break;
case lianxic : if(c1==0){
digitalWrite(LED_PIN6, HIGH);
c1=1;}
else{
digitalWrite(LED_PIN6, LOW);
c1=0;}
break;
case lianxid : if(d1==0){
digitalWrite(LED_PIN7, HIGH);
d1=1;}
else{
digitalWrite(LED_PIN7, LOW);
d1=0;}
break;
}
}
}
现在的问题是在Flash端口点击后led闪烁一下马上就灭啊
|