• 專注電子技術學習與研究
    當前位置:單片機教程網 >> Arduino >> 瀏覽文章

    Flash連接Arduino mega的雙路藍牙高速連接成功

    作者:未知   來源:互聯網   點擊數:  更新時間:2014年07月31日   【字體:

      由于要做雙無線傳感器,之前已經搞定了雙路藍牙接收問題,但是一直都存在問題,主要是由于mega上的代碼不夠好導致數據經常丟失,想了很多辦法,終于搞定了。

      首先主要是mega上的代碼的改進:
     ****************************************************************************
    String comdata = "";
    String shuju="#";
    String shuju2="%";
    int i;
    char zhilin;
    char sj1;
    char sj2;
    void setup()
     {
         Serial.begin(9600);
         Serial1.begin(9600);
         Serial2.begin(9600);
     }
    void loop()
     {
      //下面語句是來發送指令給無線傳感器端的,主要是接收電腦端的指令然后轉發給傳感器端
            if (Serial.available() > 0)  
           zhilin=char(Serial.read());
             if(zhilin=='b')
             {
               Serial1.print("b");
               Serial2.print("b");
               zhilin='c';
             }
             if(zhilin=='o')
             {
              Serial1.print("o");
              Serial2.print("o");
               zhilin='c';
             }
    //下面是串口1端上的藍牙接收到的數據處理
         while (Serial1.available() > 0)  
         {
            sj1= char(Serial1.read());
            if(sj1!='\n')
            shuju+=sj1;
            if(sj1=='$')
            {
              Serial.println(shuju);
           shuju="#";  
       }
         }
    //下面是串口2端上的藍牙接收到的數據處理
         while (Serial2.available() > 0)
         {
           sj2= char(Serial2.read());
            if(sj2!='\n')
            shuju2+=sj2;
            if(sj2=='$')
            {
              Serial.println(shuju2);
           shuju2="%";  
         }
         }
         }
    ***********************************************************************
    數據頭“#”或“%”來區別傳感器1和2的數據。
    下面是Flash端的類文件:
    ***********************************************************************
    package 
    {
    import flash.events.Event;
    import flash.display.Sprite;
    import flash.display.MovieClip;;
    import flash.net.Socket;
    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 shuanglanya extends MovieClip
    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 static var  msg:String;
    public static var  msg1:String;
    public static var msgarray1:Array = new Array();   //新建一個名為msgarray的全局數組
    public static var ari1:Number=0;
    public static var  msg2:String;
    public static var msgarray2:Array = new Array();   //新建一個名為msgarray的全局數組
    public static var ari2:Number=0;
    public static var  msg3:String;
    var ri1:Number=0;
    var ri2:Number=0;
    var xsarduinotime1:TextField = new TextField();//新建一個名為xsarduinotime的文本框 
    var xsarduinotime2:TextField = new TextField();//新建一個名為xsarduinotime的文本框 
    var i:Number=0;
    var index:int;
    var index2:int;
     
    //gettime主程序
    public function shuanglanya()
    {
     
    addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);    //偵聽類是否被添加到舞臺,每次添加時運行onAddedToStage
    }
                
    private function onAddedToStage(event:Event):void
    {
    removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);    //移除偵聽
     
     //下面的程序是與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 = "";//定義一個字符串緩存字符
    private var buffer1:String = "";//定義一個字符串緩存字符
    private var buffer2:String = "";//定義一個字符串緩存字符
    private var buffer3:String = "";//定義一個字符串緩存字符
     //下面程序師接受來自arduino的數據,一個字母一個字母接收的
           
    private function onSocketData(event:ProgressEvent):void
    {
    var data:String = _socket.readUTFBytes( _socket.bytesAvailable );
    buffer+=data;
    while((index = buffer.indexOf(EOL_DELIMITER)) > -1)
    {
    i=0;
    msg = buffer.substring(i, i+1);
    while(msg!="#"&&msg!="%")
    {
    i++;
    msg = buffer.substring(i, i+1);
    }
     
     
    if(msg=="#")
    {
     msg1=buffer.substring(i+1,index);
       trace(msg1);
      xsarduinotime1.text=msg1;  
     
    }
    if(msg=="%")
    {
    msg2=buffer.substring(i+1,index);
        trace(msg2);
      xsarduinotime2.text=msg2;  
     
    }
     buffer=buffer.substring(index+1);
     
      xsarduinotime1.width=400;   //文本框的寬度200
      xsarduinotime1.height=200;
      xsarduinotime1.x=100;       //文本框的位置
      xsarduinotime1.y=10;
       //顯示time from arduino
      
        xsarduinotime2.width=400;   //文本框的寬度200
      xsarduinotime2.height=200;
      xsarduinotime2.x=300;       //文本框的位置
      xsarduinotime2.y=10;
     
      var format:TextFormat = new TextFormat();    //新建文字格式format
            format.size=24;                        //文字大小24
        xsarduinotime1.setTextFormat(format);       //將文字格式賦予xsarduinotime文本框    
    addChild(xsarduinotime1);
        xsarduinotime2.setTextFormat(format);       //將文字格式賦予xsarduinotime文本框    
    addChild(xsarduinotime2);
    }
    }
        //下面就是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);
    }
    }
     }
    **************************************************************
    動畫界面上的兩個文本框實時顯示來自兩路藍牙的數據。
    關閉窗口

    相關文章

    国产农村精品一级毛片视频_亚洲Av无码专区国产乱码在线观看_亚洲综合国产Av_天天影视网天天综合色