【AS3】arduino-connector類庫問題
最近有朋友也需要進行機構的整合串接,
該項目正好也是採用到ARDUINO配上AS3的作法。
而好死不死,也用到了國外的人寫的一個類庫。
正好回憶起之前做這個類庫的整合辛酸。
as3-arduino-connector
這個類庫如果只是拿來做測試,玩玩還可以,
真要做專案的話,要有大改的心理準備。
這類庫存在著一些很嚴重的問題。
而網上的各種文章,似乎都沒人提及這類上的問題。
好在這個類庫是開源的,包含擴展的DLL都有源始碼。所以可以從其中看出問題。
這個類庫主要是「讀取」方面的問題。
如果只是發送資料,則可以使用,都是正常的。
主要發生的情境如下:
如果你的Arduino,在同時間會接收到大量的資訊亮的時候。
一開始可能還會接收到資訊,但是過沒幾個包以後,會發現資訊一個都進不來了
導致你必須要重新對Arduino進行comport的重新連接,才會恢復。
但是又是會過一下子,資訊又會收不到。
這個問題,是因為這個類庫在接收comport的資訊的時候,沒將它的狀態處理好。
我們直接看coode:
這一段就是判斷如果有comport有資料,就發送了一個StatusEvent告訴AS3的端口
這個問題就是AS3,從頭到尾都沒有收到SerialANE.C傳來的StatusEvent
那是因為SerialANE.C,在處理自己的狀態「sentEvnt」的時候,沒有處理好。
導致sentEvnt變更為1以後,永遠都變不回來0。
所以導致RS232跟SerialANE都是正常在溝通。
但是因為sentEvnt的狀態都維持在1,所以無法通知AS3去接收資料。
至於為什麼sentEvnt永遠都在1,那是因為該類庫在處理這狀態的時候
sentEvnt要重置為0的情況
只會發生在getByte被調用的時候。
後來就採用另一個做法。
把讀取Buffer的工作落到AS3去處理,接口也都改掉。
工程很浩大就是了。幾乎可以說是改掉整個架構。
不過看到國外有一個很硬幹的做法去解決這個類庫的問題。
SerialANE.C就是在發出StatusEvent的時候,再過500毫秒再將在sentEvnt更改為0。
這方法貌似可行,又快速可以解決,
但是這種硬解法不一定是最佳解。
又或者可以參考另外國外的人的解法
若是要用as3去調用arduino,
真心建議自己寫一個類庫比較實在,或是直接使用unity,
unity直接就可以與RS232做溝通
AS3這個類庫真的是太坑爹了。
張貼留言