<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> 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);
        }
        }
         }
        **************************************************************
        動畫界面上的兩個文本框實時顯示來自兩路藍牙的數據。
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮