<u id="blkba"></u>

        <acronym id="blkba"></acronym><font id="blkba"><tbody id="blkba"></tbody></font>
      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> Arduino >> 瀏覽文章

        基于Arduino和Flash的DisLab課件制作教程—4

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

                           第4節  Arduino與Flash動畫的互動

            其實如果你同時玩過Arduino和Flash的話,有了前幾節的內容,就可以自己做很多東西了。記得我最初在做的時候網上只能找得到很簡單的如何將Arduino和Flash連接的介紹,并且幾乎全部都是用到了Flash中的Actionscript2.0語言來寫的,可是那是很老版本的Flash了,現在大家幾乎都在用Actionscrpit3.0了。最初的時候沒有辦法,只能用as2.0的,因為自己沒有能力改寫。后來終于在一個國外的網站上很偶然的發現了有人用3.0編的一段程序,最后才有了現在的一些制作......可能在高手看來這么簡單的東西,但是我覺得自己還是摸索了很久很久......好了,不提往事,既然現在已經搞定了,我就將其寫出來,以便后來的同學可以不用花那么久就可以學會了。
            這節我們就來講講Arduino和Flash的互動吧,我覺得之所以選擇用Flash來做上位機端的軟件,最關鍵的還是看中了它的動畫,Flash是動畫界的佼佼者,而Arduino有時連接傳感器的最方便選擇。將兩者結合變可做出一般的上位機軟件所無法達到的效果。
           首先Arduino端,這次得接點傳感器了。本實驗要用到sharp的紅外測距模塊,我手邊有一塊是sharp 2Y0A02的紅外測距模塊,可能你的型號不同,不過沒有關系,紅外測距模塊最后輸出的是模擬電壓信號,它只是將距離轉化為了模擬電壓信號輸出。首先將紅外測距模塊的輸出端接到arduino上的A0端。還得給Arduino寫入程序:
        ************************************以下為Arduino端程序*******************************
        int sensorPin = A0;   
        int i = 0; 
        int juli;
        void setup() {
           Serial.begin(9600);
        }
         
        void loop() {
          i = analogRead(sensorPin);  
          juli=125810/i-23.669;    //將讀到的模擬電壓值轉變為距離值,mm為單位
         Serial.print(juli);
         Serial.println("$");
          delay(100);                  
        }
        **********************************************************
        程序中的轉變的函數我是自己簡單測量的,用excel算出來的,可以看到線性度還是很好的,只是電壓值與距離是成反比的。

        接下去開始做Flash動畫了,同樣先新建一個actionscript3.0類文件,取名hongwaiceju.as,當然類名稱也是這個。程序如下:
        ***************************以下為hongwaiceju.as類文件***************************8
        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 hongwaiceju 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;              //新建一個全局字符串變量
        var xsarduinotime:TextField = new TextField();//新建一個名為xsarduinotime的文本框 
         
         
        //gettime主程序
        public function hongwaiceju()
        {
         
        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 = "";//定義一個字符串緩存字符
         //下面程序師接受來自arduino的數據,一個字母一個字母接收的
               
        private function onSocketData(event:ProgressEvent):void
        {
        var data:String = _socket.readUTFBytes( _socket.bytesAvailable );
        buffer += data;
         
        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);
          xsarduinotime.width=200;   //文本框的寬度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 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);
        }
        }
        **************************************************************************
        和第2節的類文件非常類似,只是改一下類文件名,還有就是將msg定義為了全局變量,以便待會可以引用。
        接下去在和類文件同一個文件夾下創建一個actionscript3.0文件,先新建一個影片取名box(其實隨你取什么都行):
        然后再隨便在你新建的影片剪輯里畫點什么,我這里畫了個方塊,然后再回到主場景,在庫里面將你剛建好的那個影片剪輯拖到主場景隨便什么位置,然后再在屬性里給其取名為box1。

        然后點擊主場景,在動作里添加如下程序:
        *********************************主場景動作程序******************
        import flash.display.Shape; 
        addEventListener(Event.ENTER_FRAME,onEnterFrame);
         function onEnterFrame(event:Event):void{        //每一幀加載時所要運行的程序
         
        box1.y=600-Number(hongwaiceju.msg);      //box1,就是我們拖進去的那個影片剪輯的y坐標定義
         }
        ***************************************
        大功告成,現在先運行serproxy.exe,然后按下Ctrl+Enter,觀看一下最后的結果吧。把手放在紅外測距儀上方,上下移動,怎么樣,Flash動畫里的方塊也會跟著動起來吧!同理,你可以控制其他的動畫,或者Flash小游戲......
        關閉窗口

        相關文章

        特黄级国产片aaa,日本免费啪啪漫画无遮拦,欧美最厉害的rapper潮水
              <u id="blkba"></u>

              <acronym id="blkba"></acronym><font id="blkba"><tbody id="blkba"></tbody></font>