本週開始將 SoftwareSerial 加入 ROSA,我先把它當作程式除錯使用,用它列印一些系統狀態,以方便了解程式執行到甚麼地方,不過並不太成功,今天留個紀錄,給有興趣的朋友參考。
原先我使用 Arduino IDE 1.6.3,在單一 ino 檔 #include <SoftwareSerial> 是 OK 的,不過現在程式拆成好幾個 cpp 後,想加入 SoftwareSerial,編譯程式總是回應找不到 SoftwareSerial.h 或是 SoftwareSerial.cpp,個人研判是系統編譯路徑出問題,之前 IDE 是 ZIP 下載沒安裝,因此改採安裝 IDE 1.6.8 才解決這問題。
現在藍牙是可以用,
雖然使用 C++ 的字串函式處理比較方便,不過程式編譯後執行會產生許多不預期狀況,根據以前經驗研判,因字串長度會變化,RAM 區內容常搬來搬去,有時內容可以透過藍牙傳出,程式改一下又傳不出來,可能與編譯器對程式記憶體配置有關,由於這部分超乎個人能力無法除錯,所以,我決定下週要重寫改碼,字串以字元陣列記憶定址方式處理,看似會多花時間寫程式庫,但是系統是能夠正常穩定的。
此外,也與 Daniel 討論,他是說 C++ 方式應該不會影響程式運作的時序,有沒有可能使用 SoftwareSerial 的 pin 的 Timer 中斷和其它共用導致,有建議將 Servo 運作抽離 loop(), 改用 Timer 1 中斷統一運作。關於此點,我的看法是 Servo 已經完全無使用任何 Timer 中斷,也無佔用 PWM,因此不會對 SoftwareSerial 造成任何影響,我對中斷的看法是,對控制時序有極度需求精準的東西,才會使用中斷,否則留下這些資源給其它程式庫使用。未來是不排除使用中斷來控制 Servo,不過這也要等系統比較穩定後再改良。
最後結論是,我先以 C 架構 SoftwareSerial 通訊系統,Daniel 有空再將它修成 C++。
感謝 Greg Lincoln 熱情作出 LEGO SPIKE Prime的模擬器
-
感謝 Greg Lincoln 熱情作出 LEGO SPIKE Prime的模擬器 https://app.blockybot.org/
簡潔的操作介面與逼真的模擬環境,真是太棒了!
Greg Lincoln 開發的 BlockyBot 是一個針對 LEGO SPIKE Prime
的模擬器,主要提供...
14 小時前
Good job. 我先偷跑,改好 C++了。☺
回覆刪除辛苦了,我這邊也將 #* 功能加入了,因為可以執行串聯指令,所以加入 Pipe 處理,另外新增 GOSUB 可以執行副程式,因此有 Stack 處理。
刪除