日旅規劃網站推廣中
  • 由於免費空間開始有點負荷過重,速度不盡理想,即日起開始於比較不顯眼也不會造成操作負擔的位置加入些許廣告,評估日後租用空間的費用,造成不便敬請見諒
  • http://jp.mok.idv.tw
  • 使用手冊詳見 [推廣] 輕鬆建立漂亮的旅遊行事曆 ! - 日本旅遊規畫協助網站 若有使用上的問題或建議歡迎提出討論
  • 自遊Nippon粉絲頁開張! 歡迎大家多多利用粉絲頁來提出問題或者建議歐!→前往粉絲頁
  • 2014/11/11 由於Pixnet關閉先前樣式,今日起開始測試新樣板
  • 大家習慣的側邊攔,都收在最上面了 文章分類->CATEGORY / 最新文章->NEW POST 請將滑鼠移至對應選項即可看見
  • 今天搞這東西搞了一陣子,明明就是很簡單的程式卻一直卡在奇怪的地方沒有辦法突破

    最後終於搞好了,記錄一下順便給當我在異鄉的時候還要繼續拼的夥伴的有個可以查詢資料的地方

    以下分為三部分 (1) Arduino程式部分 (2) Flash程式部分 (3) 硬體部分

    ----------------------------------------------------------------------------------------------------------

    此程式用意很間單,透過Arduino,當按下微動開關或者按鈕時,傳送0 & 1的值給Flash進一步進行

    接下來的步驟,開關可為微動,磁簧,或者是Switch皆可

    ----------------------------------------------------------------------------------------------------------

    Part(1) Arduino程式部分

    int sw = 3;                           //定義腳位,digital腳位#3
    int val = -1;                         //這個變數要用來接讀到的訊號,初值-1是因為接的值為0 1 ,避免出錯

    void setup()                        //Arduino程式起始設定

    {
      Serial.begin(9600);          //Serial Port傳輸速率定義,一律設成9600
      pinMode(sw , INPUT);      //將sw所指定的腳位設定為INPUT,因為我們是要抓裡面傳來的訊號
    }


    void loop ()        //Arduino啟動後會一直執行的程式部分,主要程式碼都寫在這裡面

    { 

      val = digitalRead(sw);  //讀取sw腳位中的數值並asign給val

      if(val==1)                       //開關按下狀態
        Serial.print(1,BIN);       //將數值1傳給Serial Port , 型態為BIN(binary)
      else if(val==0)               //開關放開狀態
        Serial.print(0,BIN);       //將數值0傳給Serial Port , 型態為BIN(binary)
      else                               //為了避免接到某些奇奇怪怪的值而出錯,多設一個else作為預防
        Serial.print(3,BIN);
      Serial.print(0,BYTE);      //傳送完值以後一定要丟一個0過去,定義為BYTE,讓程式知道值傳完了

                 //否則會一直等待直到下一個值進來,然後程式就會出錯!
      delay(1000);        //設定延遲時間
    }

    ----------------------------------------------------------------------------------------------------------

    Part (2) Flash 程式部分

    import Arduino;                                                          //載入Arduino設定檔
    var port:Number = 5334;

           //設定Serial Port連接位置 , com1~com4=5331~5334 , 記得對應serproxy的設定檔

    var a:Arduino = new Arduino(port);                         //建立一個Arduino的監聽物件

    aListener = new Object();

    a.addEventListener("onConnect", aListener);        

           //要在連線一開始就做好並只做一次的工作,請將程式碼放在這裡面

    a.addEventListener("onReceiveData", aListener); 

          //要接收由Arduino傳送值並處理的工作,請將程式碼放在這裡面

    a.addEventListener("onConnectError",aListener);

          //這兩個是判斷連線狀況方便用

    a.addEventListener("onDisconnect",aListener);

    ///////////////////////////////////////
    aListener.onConnectError = function()
    {
        //連線失敗
        trace("Failed");
    }
    //////////////////////////////////////
    aListener.onDisconnect = function()
    {
        //失去連線
        trace("disconnected");

    }
    //////////////////////////////////////

    aListener.onConnect = function()
    {}
    //////////////////////////////////////
    aListener.onReceiveData = function(evtObj:Object)  //主要程式由以下開始
    {
        var inputData = new int;           //宣告一個用來接值的變數
        inputData = evtObj.data;          //接收Arduino傳過來的數值
        trace(inputData);        //最後請註解調此行,監看數值是否正確
        if(inputData>0)
        white_mc._visible = false;    //將影片元件化後命名為XXX_mc,由此法控制是否撥放
        else
        white_mc._visible = true;
    }

    ----------------------------------------------------------------------------------------------------------

    Part (3) 硬體部分

    11.jpg

    硬體就是一個簡單的微動開關,這裡所用的微動有三隻接腳

    上面分別會寫上 NC NQ C (由左至右)

    其中NC為接地(GND) NQ為電源(VCC) C為訊號輸出

    這種接法下當開關押下會處於導通狀態,輸出訊號為1,放開狀態則為斷路,輸出訊號為0

    如果將NC NQ兩個接腳反過來接,則結果會剛好相反,看情況使用

    將訊號C連接至DIGITAL腳位2~13其中的一支,由於程式中定義為2,所以這裡接到PIN2

    NC/NQ則接到ANALOG側的3V3以及GND , 純粹只是因為好接以及3v就可以用作微動開關

    就不要去用5v和digital端的供電了!

    ----------------------------------------------------------------------------------------------------------

    至於Arduino和Flash的連結方法放在另外一篇,如果在出國前還懶得寫的話.....

    夥伴們先看一下投影片好了 (逃~)

    創作者介紹
    創作者 deepviator 的頭像
    deepviator

    Mok's - 墨客工坊

    deepviator 發表在 痞客邦 留言(3) 人氣()


    留言列表 (3)

    發表留言
    • aegeanbeggar
    • hi 朋友你好! 不好意思打擾你~
      我新學arduino和flash的互動.
      請問 part2 flash 程式部分.
      第一句: import arduino;
      請問是導入了arduino.as文件嗎?~ 還是導入了arduino.pde呢?? 如果是arduino.as,那麼code是什麼呢? 多謝您指教!
    • 好像有點晚注意到這篇,import的確是導入arduino.as當時寫給組員們看的,所以就沒有另外放上這個檔案,code我直接貼在下面,希望是可以正常顯示:

      import mx.events.EventDispatcher;


      class Arduino extends XMLSocket {

      private var _connected :Boolean = false; // is connected?
      private var _host :String = "127.0.0.1"; // Host name or IP address
      private var _port :Number = 5334 //read the config file of the socket server for this one

      //EVENT DISPATCH MIXIN
      function addEventListener(){}
      function removeEventListener(){}
      function dispatchEvent(){}
      function dispatchQueue(){}

      //constructor - provide a port number and a host ip adress
      //read the documentation of the SerialProxy to better understandwhat this means
      function Arduino(port, host) {
      //initialize
      super();
      mx.events.EventDispatcher.initialize(this);
      //trace("** Arduino ** initilizing constructor");

      //check if the selected port is correct or set default
      if(port == undefined) {
      trace("** Arduino ** default port:"+_port+" initialized! to change it use new Arduino(onPortNumber)")
      } else if ((_port < 1024) || (_port > 65535)) {
      trace("** Arduino ** Port must be from 1024 to 65535 ! read the Flash Documentation and the serProxy config file to better understand")
      } else {
      _port = port;
      }

      //check for host or set default
      if(host != undefined) {
      _host = host;
      }

      //register and override responder functions
      this.onConnect = onConnectToSocket;
      this.onClose = onDisconnectSocket;
      this.onData = onDataReceived;

      //autoconnect
      connect();
      }

      //---------------------------------------
      // CONNECT and DISCONNECT + responders
      //---------------------------------------

      //connect to the XMLsocket
      public function connect () {
      trace("** Arduino ** Connecting to "+_host+":"+_port+" . . .");
      super.connect(_host,_port);
      }

      //disconnects from the xmlsocket (not Arduino itself)
      public function disconnect () {
      if (_connected) {
      trace("** Arduino ** disconnecting");
      this.close()
      _connected = false;
      }
      }

      //XMLsocket responders
      private function onConnectToSocket (success) {
      //trace("** Arduino ** onConnectToSocket");
      if (success) {
      _connected = true;
      //launch event
      trace ("** Arduino ** Connection established.")
      e_connectToSocket();
      } else {
      trace ("** Arduino ** Connection failed! you must launch the serialProxy first");
      e_connectToSocketError();
      }

      }

      //XMLsocket responders
      private function onDisconnectSocket (success) {
      _connected = false;
      //trace ("** Arduino ** onDisconnectSocket ** Connection closed by remote host.");
      //launch event
      e_disconnectSocket()
      }



      //---------------------------------------
      // SEND and receive data from server
      //---------------------------------------

      //sends data to arduino
      public function send(dataStr:String) {
      //trace("** Arduino ** send:" + dataStr)
      if (_connected) {
      if (dataStr.length) {
      //trace("** Arduino ** Sending \""+dataStr+"\"");
      super.send(dataStr);
      }
      }
      }

      //overrides XMLSocket.onData in order to have pure string and not the full XML object
      private function onDataReceived (str:String) {
      //trace("** Arduino ** onDataReceived str:"+str);
      //launch event
      e_onReceiveData(str)
      }




      //---------------------------------------
      // EVENTS
      //---------------------------------------

      private function e_connectToSocket(){
      var evt = {target:this, type:"onConnect"};
      dispatchEvent(evt);
      }

      private function e_connectToSocketError(){
      var evt = {target:this, type:"onConnectError"};
      dispatchEvent(evt);
      }

      private function e_disconnectSocket(){
      var evt = {target:this, type:"onDisconnect"};
      dispatchEvent(evt);
      }

      private function e_onReceiveData (str:String){
      var evt = {target:this, type:"onReceiveData"};
      evt.data = str;
      dispatchEvent(evt);
      }

      }

      deepviator 於 2012/03/31 04:52 回覆

    • aegeanbeggar
    • 非常感谢你的回复!!!多谢!
    • Starzon
    • 在part(1) arduino 程式部分:

      輸入完後arduino驗證後顯示:

      從arduino1.0開始,不再支援關鍵字'BYTE'

      請問該怎麼改呢?

      謝謝 :)
    • 手邊沒有測試的機子,以下為可能的修改方式,你可以試試看

      Serial.print((char)0);
      Serial.print((int)0);
      Serial.write(0);

      deepviator 於 2015/02/02 12:21 回覆