--- title: 'Arduino 燈泡循環閃爍' disqus: hackmd --- ***    *** ## 目錄 [TOC] ## 模擬平台 **[ ](https://tinkercad.com)** ### 使用原因: *** 手邊沒有這麼多類型的電子元件,目前只有一塊學校發的ESP8266, 而Tinkercad是一款免費的3D建模程序,可在Web瀏覽器中運行。 在Tinkercad Circuits中,可以模擬和驗證Arduino開發板的功能, 它們提供了許多電子元件去進行模擬和測試。   *** 使用者故事 -- ```gherkin= Feature: Arduino LED Control Scenario: LED blinking Given the LED pin is set to 13 When the Arduino program is running Then the LED should blink on and off every second ``` > Read more about Gherkin here: https://docs.cucumber.io/gherkin/reference/ 實作部分 --- ### 電路視圖:  ### 線路視圖:  ### 元件清單:  ### 程式碼: ```cpp void setup() { pinMode(13, OUTPUT); // 設定腳位 13 為輸出模式,用於控制 LED Serial.begin(9600); // 啟動串列通訊,設定鮑率為 9600 } void loop() { unsigned long currentTime = millis(); // 取得目前的系統時間,單位為毫秒 digitalWrite(13, HIGH); // 將腳位 13 設定為高電位,點亮 LED Serial.print("LED_on.exeTime: "); // 輸出文字訊息到串列監視器 Serial.print(currentTime); // 輸出目前的系統時間到串列監視器 Serial.println(" ms"); // 輸出單位到串列監視器並換行 delay(1000); // 等待 1000 毫秒 currentTime = millis(); digitalWrite(13, LOW); // 將腳位 13 設定為低電位,熄滅 LED Serial.print("LED_off.exeTime: "); // 輸出文字訊息到串列監視器 Serial.print(currentTime); // 輸出目前的系統時間到串列監視器 Serial.println(" ms"); // 輸出單位到串列監視器並換行 delay(1000); // 等待 1000 毫秒 } ``` ### 輸出:  ### 問題: *** 這個誤差是由程式碼中的延遲函數"delay(1000);"引起的。 "delay()"函數會暫停程式的執行指定的時間(在這種情況下是 1000 毫秒),但並不精確。 Arduino的"delay()"函數使用的是系統計時器, 該計時器在每個迴圈中都會增加計時器的值, 並在達到指定的延遲時間後才繼續執行下一個指令。 然而,計時器的增加速率可能會有一些微小的誤差, 這可能導致延遲時間略微長於指定的時間。 因此,當連續執行延遲函數時,這個微小的誤差會累積起來, 使得每次延遲的時間比前一次略微長一些。 這就是為什麼觀察到的執行時間逐漸增加了。 需要更精確的時間控制,考慮使用其他方法來取代"delay()"函數。 例如,可以使用"millis()"函數結合判斷時間間隔的方式來實現精確的時間控制。 *** ### 優化內容:  ### 輸出:  :::info **問題解決!** ::: 使用者流程 --- ```sequence User->Arduino: 啟動程式 Arduino->LED: 設定腳位為輸出模式 User->Arduino: 開始執行程式 Arduino->LED: 設定為高電位(亮燈) Arduino-->User: 回傳 LED 亮起訊息 Arduino->Delay: 等待 1000 毫秒 Arduino->LED: 設定為低電位(熄燈) Arduino-->User: 回傳 LED 熄滅訊息 Arduino->Delay: 等待 1000 毫秒 User->Arduino: 結束程式 ``` > Read more about sequence-diagrams here: http://bramp.github.io/js-sequence-diagrams/ 項目時間軸 --- ```mermaid gantt title 時間規劃 section 項目 燈泡循環閃爍 :2021-06-04, 1d 偵錯 :2021-06-04, 1d section 優化 發現問題 :2021-06-05, 1d 優化程式碼 :2021-06-06, 2d ``` > Read more about mermaid here: http://mermaid-js.github.io/mermaid/ ## 附錄&常見問題 :::info **Find this document incomplete?** Leave a comment! ::: ###### tags: `Arduino` `Arduino_Uno` `Tinkercad_Circuits` `LED_controler`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up