-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Welcome to the FlashArduinoLeonardoGettingStarted wiki!!
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
- 電路接線:
由於Leonardo Arduino的Serial port溝通是透過軟體模擬的(較不同於UNO,是直接由另外一顆晶片硬體處理),所以在程式撰寫上,需要注意一些小細節。
- Arduino端程式重點:
- 在
Setup()
中,當呼叫完Serial.begin(_baudrate_)
後,需要加上下列的程式碼,來等待Serial port正確被連接上:while (!Serial) { ; }
- 在使用
Serial.print(_value_)
後,需再Serial.print(EOL_DELIMITER)
,作為TinkProxy判斷封包使用,必須在Loop()
的結束前,加上適當的delay(1)
,以免Leonardo的Serial port太過忙碌,造成訊號無法正確傳遞。
先下載好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的資料夾中有三個檔案:
- Flash2Arduino.fla
- Flash2Arduino.swf
- SerialPort.as
基本上SerialPort.as我們可以不用管,是TinkerProxy寫好提供橋接的用API,我們只要管怎麼在Flash中使用就好。
- Flash2Arduino.fla:
在這個範例中,我們將藉由Arudino傳來的數值,控制球的大小,以及可以透過點擊畫面的球,來控制Arduino上LED的明滅。
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的動作一起明滅。