Skip to content
MAO edited this page Sep 15, 2013 · 23 revisions

Welcome to the FlashArduinoLeonardoGettingStarted wiki!!

FLASH with Leonardo


What we need :

  • Arduino Leonardo

  • Arduino IDE & dirver

  • TinkProxy TinkProxy 是一個簡易的local proxy,可以橋接Flash的socket介面與Serial port,讓Arduino可以跟Flash溝通。因為Flash並沒有實際的Serial port溝通能力,所以我們必須藉由第三方軟體來將Flash對外的Socket溝通轉成Serial port訊號。

  • Flash / ActionScript compiler

Arduino:

  • 電路接線: OZONE example circuit

由於Leonardo Arduino的Serial port溝通是透過軟體模擬的(較不同於UNO,是直接由另外一顆晶片硬體處理),所以在程式撰寫上,需要注意一些小細節。

  • Arduino端程式重點:
  1. Setup()中,當呼叫完Serial.begin(_baudrate_)後,需要加上下列的程式碼,來等待Serial port正確被連接上: while (!Serial) { ; }
  2. 在使用Serial.print(_value_)後,需再Serial.print(EOL_DELIMITER),作為TinkProxy判斷封包使用,必須在Loop()的結束前,加上適當的delay(1),以免Leonardo的Serial port太過忙碌,造成訊號無法正確傳遞。

TinkerProxy設定:

先下載好Tinkerproxy,或是本範例裡也有附小幅度修改版的,現在最新可以用的版本為2009年三月時釋出的2.0版。

若下載後解壓縮,可以在tinkerproxy-2_0資料夾裡發現下列檔案:

  • serproxy.exe
  • serproxy.osx
  • serproxy.cfg
  • serproxy.osx.cfg (本範例修正版才有,原處下載檔並未含,若你是MAC使用者,你必須把serproxy.cfg改名為serproxy.osx.cfg)

接著讓我們來看一下serproxy.cfg(or serproxy.osx.cfg)裡的設定:

newlines_to_nils=false

設定是否要將由Arudino過來的Serialport訊息自動加上換行字元,Tinkerproxy是透過換行字元來判斷要丟給Flash封包的切割,但因為我們所使用的Arudino範例檔案,已經自己處理了加上Serial.print(EOL_DELIMITER),所以這裡就保持false就可以了。

serial_device1=/dev/tty.usbmodemfa131

若你是MAC使用者,你需要設定這裡,把接Arduino的Serialport名稱填上,你可以由Arduino IDE介面的Tools>Serial port去抄下名字,或是打開Terminal,到/dev中,找到名字會像是 /dev/tty.usbmodemfa131 或 /dev/cu.usbmodemfa131, 但為了順利跟Flash溝通,最好選擇 /dev/cu.usbmodemfa131,像這種以"cu."開頭的。

comm_ports=1,2,3,4

若你是Windows使用者,則是要設定這裡,這裡的1,2,3,4,代表著COM1,COM2,COM3,COM4,來對應接下來要設定的Port1,Port2,Port3,Port4。 所以這裡要比較注意的地方是,若你接的Arduino是COM3(若你的電腦沒接過什麼Serialport裝置,通常都在COM3或COM4),你只要用這個Arduino跟Flash溝通,那你可以把這裡改成comm_ports=3,意思就是使用COM3來做為port1的溝通介面。

timeout=300

設定Tinkerport多久沒有資訊進來會跳出,這裡通常算比較實務的,若你的Arduino裝置設定不是一直送訊號給Flash介面,是有人操作才開始送訊號,有可能10分鐘內只有1、2次的操作,那會建議你將timeout時間調高一點,例如timeout=180000就代表若半小時(1000 = 1sec),但若你嫌麻煩,也可以設定是一直送訊號的,這裡就不需要修改。

net_port1=5331

設定所設好的Serial port1要對應的Socket port是哪一個,像此就是代表port1進來的訊息,會傳改5331的socket port。

FLASH

在flash的資料夾中有三個檔案:

  • Flash2Arduino.fla
  • Flash2Arduino.swf
  • SerialPort.as

基本上SerialPort.as我們可以不用管,是TinkerProxy寫好提供橋接的用API,我們只要管怎麼在Flash中使用就好。

  • Flash2Arduino.fla:

在這個範例中,我們將藉由Arudino傳來的數值,控制球的大小,以及可以透過點擊畫面的球,來控制Arduino上LED的明滅。 flash example

var arduino:SerialPort = new SerialPort();

宣告一個SerialPort物件,名叫arduino

arduino.addEventListener(DataEvent.DATA, onArduinoData );

並指派一個監聽事件,若有訊息進來,會去呼叫函式onArduinoData

arduino.connect("127.0.0.1", 5331 );

連結本機端的port 5331

接下來就簡單了,我們可以在函式onArduinoData()裡中,透過var ArduinoInt = event.data;,取得由Arduino傳來的資訊,用來當做控制球大小的數值。

更可以自己新增一個滑鼠事件:ball_mc.addEventListener(MouseEvent.CLICK, controlLED);

透過滑鼠點擊,傳指令給Arduion:arduino.send("H"); arduino.send("L"); ,讓Arduino上的LED可以跟著Flash的動作一起明滅。


Creative Commons

Clone this wiki locally