使用微軟Visual Studio Code編寫Arduino程式(二)

每次用VS Code建立新的Arduino程式專案,都需要執行下列步驟:

  • 新增儲存Arduino專案程式的資料夾
  • 執行Arduino: Initialize命令、建立.ino檔
  • 編輯c_cpp_properties.json設置檔
  • 開始編寫Arduino程式

底下以編寫閃爍LED的程式為例,說明VS Code的使用方法。

使用VS Code編寫LED閃爍程式

Arduino IDE要求.ino原始檔必須存在同名的資料夾之內,假設要建立名叫blink.ino的程式檔,請先建立名叫blink的資料夾。

與Arduino程式檔同名的資料夾

接著,把新增的資料夾“blink”拖入VS Code的「檔案總管」窗格,或選擇「檔案→開啟資料夾」命令,打開“blink”資料夾。

空白的"blink"資料夾

F1功能鍵,在「命令面板」輸入並執行“Arduino: Initialize”命令,初始化VS Code的Arduino程式開發環境。

執行“Arduino: Initialize”命令

VS Code將回應在此資料夾找不到同名的.ino檔;請輸入“blink.ino”再按下Enter鍵。

輸入程式檔名

接著,VS Code將詢問控制板類型,此例請選擇Arduino Uno。

選擇控制板

最後,VS Code將自動產生:

  • 一個包含空白setup()和loop()函式的程式檔。
  • 一個“.vscode”資料夾,並在其中存入兩個JSON格式的設定檔。

“.vscode”資料夾內容

但是,空白的Arduino程式檔(此例為blink.ino)會出現兩個錯誤。先不用理會這些錯誤提示,等一下再來修正它們。

空白的Arduino程式檔

編輯c_cpp_properties.json設定檔

“cpp”代表”C Plus Plus”,也就是C++程式語言,在VS Code編寫C或C++程式時,專案資料夾裡面都要有c_cpp_properties.json檔,裡面記載了編譯器的路徑、C語言的版本、程式庫路徑…等,驗證與編譯程式的必備資訊。

我們必須手動編輯其中的一些設定,底下是編寫Atmel AVR系列處理器的控制板程式(例如,採Atmel ATmega328處理器的Arduino Uno控制板)的c_cpp_properties.json設置內容範例:

Arduino程式開發用的c_cpp_properties.json設定檔

其中的“includePath”(包含路徑)屬性,標示了程式庫的所在位置,“forcedInclude”(強制包含)屬性的“Arduino.h”檔,則定義了Arduino語言的核心指令和常數,例如HIGH, LOW, pinMode, …等等。

底下的 c_cpp_properties.json 原始碼假設Arduino IDE安裝在預設的C磁碟Program Files (x86) 路徑

{
    "configurations": [
        {
            "name": "Arduino Uno",
            "includePath": [
                "${workspaceFolder}/**",
                "C:/Program Files (x86)/Arduino/hardware/arduino/avr/cores/arduino",
                "C:/Program Files (x86)/Arduino/tools/**",
                "C:/Program Files (x86)/Arduino/hardware/arduino/avr/**",
                "C:/Program Files (x86)/Arduino/hardware/tools/**",
                "C:/Program Files (x86)/Arduino/libraries/**",
                "C:/Users/${env:Username}/Documents/Arduino/libraries/**"
            ],
            "forcedInclude": [
                "C:/Program Files (x86)/Arduino/hardware/arduino/avr/cores/arduino/Arduino.h"
            ],
            "defines": [
                "USBCON",
                "ARDUINO=10809"
            ],
            "intelliSenseMode": "clang-x64",
            "compilerPath": "C:/Program Files (x86)/Arduino/hardware/tools/avr/bin/avr-gcc.exe",
            "cStandard": "c11",
            "cppStandard": "c++17"
        }
    ],
    "version": 4
}

編輯並儲存c_cpp_properties.json檔案之後,原本VS Code編輯器出現的程式錯誤提示將會消失。

附帶一提,底下是在Windows系統上,用C/C++語言編寫Windows應用程式的c_cpp_properties.json設定檔:

Windows程式開發用的c_cpp_properties.json設定檔

其中的defines定義了“UNICODE”和“_UNICODE”兩個巨集(macro),它們都代表程式採用Unicode編碼,或許是微軟不同部門的程式開發團隊沒有協調好,才發生命名不一致的情況。

選擇連接控制板的序列埠

先把Arduino Uno控制板用USB線接上電腦,然後在VS Code的「命令面板」輸入“Arduino: Select Serial Port”命令,或點擊VS Code視窗右下角的 “Select Serial Port”:

“Select Serial Port”鈕

接著選擇Arduino Uno控制板連接的序列埠名稱:

選擇序列埠

VS Code將在“.vscode”資料夾裡的arduino.json檔,自動填入本專案採用的Arduino控制板類型、連接的序列埠和程式原始檔名,我們不用修改它。

arduino.json內容

編寫、編譯與上傳Arduino程式

在blink.ino檔輸入閃爍LED的程式碼,其中的LED_BUILTIN常數,代表控制板內建LED的連接腳位,其值在Uno控制板是13、在Wemos D1 Mini (ESP8266) 是2。(註:若控制板採用AVR處理器,例如:Arduino Uno,此常數定義在Arduino IDE安裝路徑裡的“hardware\arduino\avr\variants\standard”當中的pins_arduino.h檔。)

閃爍LED的程式碼

存檔後,在「命令面板」輸入“Arduino: Upload”,或者按編輯器視窗右上角的「上傳程式」鈕,VS Code將驅使Arduino IDE的工具軟體開始編譯並上傳程式到Arduino板。

程式上傳完畢

延伸閱讀

Posts created 470

13 thoughts on “使用微軟Visual Studio Code編寫Arduino程式(二)

  1. 老師請問一下,在MAGE 2560的板子情況下會出現Serial1~3未定義的情況,且Arduino IDE有安裝Teensy但到了Visual Studio Code其他諸如ESP等等的都有出現唯獨Teensy的選項沒出現,請問有什麼方法解決嗎?

    1. 我手邊沒有Teensy,MEGA 2560板,建議使用Arduino官方新推出的Arduino Pro IDE試試(目前仍在早期開發階段),對AVR微控器有語法提示功能。

      thanks,
      jeffrey

  2. 你好請問一下
    “includePath”: [
    “D:\\Work Program\\arduino-1.8.10\\**”,
    “C:\\Users\\${env:Username}\\Documents\\Arduino\\libraries\\**”
    這樣可以嗎?

  3. #include AccelStepper.h

    void setup()
    {
    程式碼….
    }
    void loop(){
    程式碼….
    }
    遇到 : 偵測到 #include 錯誤。請更新您的 includePath

    請問怎麼解決?謝謝

    1. 請參閱上文說明,手動修改c_cpp_properties.json檔裡的includePath路徑。

      thanks,
      jeffrey

  4. 您好,已解決上述問題,但是再請教您,切換到 serial Monitor 沒有告知讀取都沒有出現
    如下程式碼的Hello! 、Please visit: test

    void setup() {
    Serial.begin(9600);
    Serial.println(“Hello! “);
    delay(100);
    Serial.println(“Please visit: test”);
    }

    void loop() {

    }

    請問是哪裡要設定嗎?謝謝

    1. 應該是鮑率設定的問題,按一下狀態列上的鮑率值,調整成9600:

      設定鮑率

      或者按F1或Ctrl+shift+p,輸入修改鮑率的命令:

      Arduino: Change Baud Rate

      如果沒有反應,按一下狀態列上的鮑率旁邊的X關閉Serial Monitor,再重新開啟。
      或者按F1或Ctrl+shift+p,輸入關閉、開啟序列埠監控視窗的命令:

      Arduino: Close Serial Monitor
      Arduino: Open Serial Monitor

      thanks,
      jeffrey

  5. 您好:
    在終端機輸入Arduino:Verify
    得到以下訊息:
    Arduino:Verify : 無法辨識 ‘Arduino:Verify’ 詞彙是否為 Cmdlet、函數、指令檔或可執行程式的名稱。請檢查名稱拼字是否正確,如果包含
    路徑的話,請確認路徑是否正確,然後再試一次。
    位於 線路:1 字元:1
    + Arduino:Verify
    + ~~~~~~~~~~~~~~
    + CategoryInfo : ObjectNotFound: (Arduino:Verify:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
    請問是不是需要改變哪一部分的路徑?

    1. 我剛剛在VS Code中,新增一個Arduino Uno板專案,按F1開啟命令面板,執行Arduino:Verify命令,測試無誤,終端機輸出:

      [Starting] Verifying sketch ‘blink.ino’
      [Warning] Output path is not specified. Unable to reuse previously compiled files. Build will be slower. See README.
      載入組態…
      初始化套件…
      正在準備開發板…
      驗證中…
      [Done] Verifying sketch ‘blink.ino’

      thanks,
      jeffrey

  6. 你好想請問

    我手動修改c_cpp_properties.json檔裡的includePath路徑,
    我加入”${workspaceRoot}\\src_”之後按下Arduino:Verify,

    剛剛加入的”${workspaceRoot}\\src_”就消失了,有甚麼辦法可以讓她不要消失嗎? 謝謝

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top