【AS3】arduino-connector類庫問題

03 10月, 2017

【AS3】arduino-connector類庫問題



最近有朋友也需要進行機構的整合串接,

該項目正好也是採用到ARDUINO配上AS3的作法。

而好死不死,也用到了國外的人寫的一個類庫。

正好回憶起之前做這個類庫的整合辛酸。



as3-arduino-connector

這個類庫如果只是拿來做測試,玩玩還可以,

真要做專案的話,要有大改的心理準備。

這類庫存在著一些很嚴重的問題。


而網上的各種文章,似乎都沒人提及這類上的問題。

好在這個類庫是開源的,包含擴展的DLL都有源始碼。所以可以從其中看出問題。



這個類庫主要是「讀取」方面的問題。

如果只是發送資料,則可以使用,都是正常的。


主要發生的情境如下:

如果你的Arduino,在同時間會接收到大量的資訊亮的時候。

一開始可能還會接收到資訊,但是過沒幾個包以後,會發現資訊一個都進不來了


導致你必須要重新對Arduino進行comport的重新連接,才會恢復。

但是又是會過一下子,資訊又會收不到。


這個問題,是因為這個類庫在接收comport的資訊的時候,沒將它的狀態處理好。

我們直接看coode:



這一段就是判斷如果有comport有資料,就發送了一個StatusEvent告訴AS3的端口




而AS3的端口這邊一旦接收到StatusEvent以後,就會對AS3的程序發送一個ArduinoConnectorEvent可以去取資料。



這個問題就是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這個類庫真的是太坑爹了。








張貼留言