在原型開發階段,經常會反覆修改軟、硬體;每次修改程式碼,就算只改一個字,Arduino程式仍需重新編譯再上傳測試。如果只想要驗證某個程式語法或演算邏輯,使用模擬器是最省時省力的辦法。
模擬器分成emulator和simulator兩大類,前者可替代原始的裝置,例如RetroArch軟體,可在電腦上模擬遊戲機、執行遊戲軟體,這一類型的模擬器要求即時反應真實機器的狀態,像是模擬遊戲機的畫面要跟實機一樣流暢、按鍵輸入沒有延遲。“emulator”也譯作「仿真器」。
Simulator則多用於產品開發和科學研究。例如,一架飛機從控制電路IC設計、引擎材料可靠度、流體力學、機械結構運作、駕駛培訓…每個領域都有不同模擬軟、硬體來輔助和驗證設計。
以工程繪圖、輔助設計製造和3D動畫軟體聞名的Autodesk(歐特克)公司,曾推出模擬電子電路並支援Arduino程式設計的123D Circuits (Circuits.io)網站。歐特克公司於2013年併購了線上3D造型設計軟體公司“Tinkercad”,然後在2017年把123D Circuits當中的“Electronics Lab”(電子實驗室)功能移到Tinkercad網站,circuits.io則更名為“library.io”,提供PCB印刷電路板設計和製造相關業務。
Tinkercad是個免費、簡單易用、直接在網頁瀏覽器中操作的3D造型設計軟體,廣受3D印表機用戶喜愛。加入電子電路和Arduino模擬器(simulator),Tinkercad便能提供創客們在3D機構設計和電路、程式模擬測試的一站式服務。
使用Tinkercad模擬跑馬燈
本單元將使用Tinkercad建立如下的電路(參閱《超圖解Arduino互動設計入門》動手做4-2:LED跑馬燈),執行Arduino程式測試跑馬燈效果:
在Tinkercad網站註冊帳號並登入之後,點擊Circuits(電路),再按下「建立新電路」:
從右邊的「元件」面板,拖放一個小型電路試驗板,並選擇性地替它命名成「麵包板」。
拖放一個電阻器到麵包板上,電阻值調成330Ω;若畫面太小,不便操作,可滾動滑鼠滾輪縮放畫面。
拖放一個LED到麵包板,正極(凸出的那一面)腳與電阻相連:
按一下LED元件,然後按著Shift鍵不放,再按一下電阻,可選取兩個元件。按下Ctrl和C鍵複製,再按下Ctrl和V鍵便能貼上剛剛複製的電阻和LED。重複按下Ctrl和V鍵、調整元件位置,完成如下的麵包板電路:
按一下其中一個LED接地腳底下的插孔,再按一下麵包板「-」排的其中一孔,即可放置一條接地線。若點擊第一個插孔時點錯位置,可按ESC鍵取消接線;若要刪除接線或元件,請點擊它,再按下DEL鍵;按下Ctrl和Z鍵可還原前一次操作。
最終完成的麵包板接線如下,從「元件」面板拖放Arduino板,再點擊工具列左上角的「旋轉」鈕,可旋轉目前選取的元件;按著元件以外的空白地方拖曳,可調整版面位置。
LED來回跑馬燈的Arduino程式
按一下「程式碼」鈕,從下拉式選單選擇「文字」式程式碼:
在程式碼編輯器中輸入LED跑馬燈程式:
完整的程式碼(可直接複製、貼入Tinkercad程式碼編輯器),程式說明請參閱這一則留言:
const byte LEDs[] = {8,9,10,11,12}; const byte total = sizeof(LEDs); int8_t index = 1; byte i = 0; void setup() { for (byte i=0; i<total; i++) { pinMode(LEDs[i], OUTPUT); digitalWrite(LEDs[i], LOW); } } void loop() { digitalWrite(LEDs[i], HIGH); delay(100); digitalWrite(LEDs[i], LOW); i += index; if (i < 0 || i >= total) { index *= -1; // 原本的1變成-1 i += (index*2); } }
按下「開始模擬」鈕,麵包板電路上的LED將會輪流來回點亮、熄滅。這個模擬器用於驗證電路和Arduino程式,delay()延遲時間可能和真實情況有所出入,但模擬結果驗證了演算法無誤。