Arduino 與 flash 溝通- 使用 funnel.cc

因為自己flash比較熟的關係,聽到老師說可以用flash去控制Arduino,就想說可以來試試看,簡單的硬體控制配上漂亮的桌面UI,應該也會有點看頭。

這次使用funnel.cc,先到官網的Download 下載整包的funnel.zip ,然後解壓縮到電腦上。

要使用先把 libraries\actionscript3\src\ 一個funnel的資料夾,放到要寫的程式的同一個資料夾,或是在flash設定參考的class路徑。

funnel1

因為flash安全性的問題,沒辦法跟硬體直接溝通,所以要放執行壓縮檔內的Funnel Server讓兩者可以溝通。
funnel2

funnel3
執行後要設定用哪塊板子跟port。

然後要把StandardFirmata燒到Arduino裡。
funnel4
funnel5

環境弄好了,接下來就開始寫code了,先寫一個可以控制led開關的flash,把 pin 接在 11 角位。

寫一隻as檔控制硬體。
  1. package    
  2. {   
  3.     import flash.display.MovieClip;   
  4.   
  5.     import funnel.*;   
  6.     import funnel.gui.*;   
  7.     import funnel.ui.*;   
  8.   
  9.     public class example1 extends MovieClip   
  10.     {   
  11.         private var arduino:Arduino;// Arduino   
  12.            
  13.         //private var led:LED;   
  14.   
  15.         public function example1()   
  16.         {   
  17.             var config:Configuration = Arduino.FIRMATA;//設定Arduino為Firmata   
  18.   
  19.             config.setDigitalPinMode(11, PWM); //設定11角為輸出   
  20.   
  21.             arduino = new Arduino(config);   
  22.             arduino.addEventListener(FunnelEvent.READY, onReady); //設定一個Ardunio的Ready事件   
  23.   
  24.             // 一個可以監看所有角位的儀表板   
  25.             var gui:ArduinoGUI = new ArduinoGUI();   
  26.             addChild(gui);   
  27.             arduino.gui = gui;   
  28.         }   
  29.   
  30.         public function onReady(e:FunnelEvent):void  
  31.         {                  
  32.                
  33.         }   
  34.     }   
  35. }  

其中的gui是用來監控訊號有沒有正常輸入,在測試的時候很方便,正式的話再看情況要不要留著。

在flash的舞台加上一個按鈕,然後寫控制的led亮暗的code。

  1. import flash.events.MouseEvent;   
  2.   
  3. btn_LED.addEventListener(MouseEvent.CLICK, btn_LED_Click); //設定按鈕的聆聽事件   
  4.   
  5. var isLight:Boolean = false// LED 開關為關   
  6.   
  7. function btn_LED_Click(event:MouseEvent):void  
  8. {   
  9.     isLight = !isLight; // 開與關相反   
  10.        
  11.     if (isLight)   
  12.     {   
  13.         arduino.digitalPin(11).value = 1; // 11角位為高電位   
  14.     }   
  15.     else  
  16.     {   
  17.         arduino.digitalPin(11).value = 0;   
  18.     }   
  19. }  

都寫好了就測試看看
led

如果都正確的話,按按鈕可以開關led燈,旁邊的面板則是剛提到的gui,可以觀察訊號是否正確改變。

留言