宁静以致远 发表于 2014-4-28 20:02:54

Arduino与Flash动画的互动

本帖最后由 宁静以致远 于 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(eventhttp://www.arduino.cn/static/image/smiley/default/tongue.gifrogressEvent):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闪烁一下马上就灭啊


         

Hackerpro 发表于 2015-6-9 10:37:15

多谢分享,终于看到flash的编程了,额,这是c++么?
页: [1]
查看完整版本: Arduino与Flash动画的互动