2011年11月13日 星期日

在 Windows XP 上安裝 Arduino Uno 驅動程式

Arduino Uno 是 2010 年的產品,先前我一直使用 Arduino Duemilanove,最近終於跟 Uno 有了接觸。

因為我還在使用 Windows XP,所以這篇記錄一下怎麼在 Windows XP 上安裝 Arduino Uno 驅動程式。相關資訊請參考「Arduino 筆記 - 準備開發環境」。

當你把 USB Cable 接到電腦上時,會出現「尋找新增硬體精靈」:

image

選擇「從清單或特定位置安裝(進階)(S)」後按「下一步」:

image

選擇「瀏覽」:

image 

把路徑指定 "arduino-00xx\drivers" 這個資料夾:

image

按「下一步」:

image

按「繼續安裝」:

image

驅動程式安裝中:

image

按下「完成」:

image

驅動程式安裝完成之後,在「裝置管理員」會多出一個 "Arduino UNO (COMx)" 的裝置:

image

接著你就可以照著「Arduino 筆記 - 準備開發環境」這篇的步驟載入 "File > Examples > 1.Basics > Blink." 這支範例程式測試 Arduino Uno 的運作,看看板子上的 LED 會不會如預期不斷地閃爍。

參考資料

22 則留言:

  1. http://arduino.tw/allarticlesindex/noncategory/131
    請問這篇用Eclipse寫Arduino語法 裡頭的第16步驟
    core.a的檔案是arduino編譯後產生的檔案還是?

    回覆刪除
  2. 那個 core.a 是 Arduino IDE 編譯 Sketch 時產生的檔案,不管編譯哪一個 Sketch 都會產生 core.a。你可以載入 "File > Examples > 1.Basics > Blink." 這支範例程式,然後按下 Shift + Verify 編譯程式,找出 Blink.cpp.hex 所在的資料夾(參考這篇 http://coopermaa2nd.blogspot.com/2011/05/arduino-ide-hex.html),應該就會看到 core.a。

    回覆刪除
  3. 嗯嗯 我找到了,非常感謝您^^

    回覆刪除
  4. 做到後面eclipse 可以Build但卻沒有產生出ArduinoTest.hex檔
    這樣就不能將hex檔燒入進arduino了,不知道版主有沒有使用過eclipse來撰寫燒入arduino的經驗 還請版主解惑>"<

    回覆刪除
  5. 我沒用過 eclipse 寫 arduino 程式
    你照著做,結果最後沒產生 ArduinoTest.hex 檔嗎?
    那 Build 的時候有沒有產生 error ?
    我有點懷疑有沒成功通過編譯
    因為第 28 步的畫面下方有個 "1 error ..." 的錯誤。

    回覆刪除
  6. 的確有3個error
    C:\Documents and Settings\YaoCherry\桌面\GPS專題\arduino-0022\hardware\arduino\cores\arduino/main.cpp undefined reference to `loop' ArduinoTest

    回覆刪除
  7. 你程式裏有 loop() 這個函式嗎?
    "undefined reference to `loop'" 是說找不到 loop() 函式。

    回覆刪除
  8. 有,是用他那篇文章所附上的Blink.cpp"LED閃爍的程式碼"
    build後所產生的error

    回覆刪除
  9. 如果你有把 loop() 加到 Blink.cpp,卻還會出現 "undefined reference to 'loop'" 錯誤的話,那麼很可能是沒有把 Blink.cpp 加到專案中喔。你檢查一下 Project Explorer,看看 Blink.cpp 有沒在專案中。可以看一下 step 28. 那張圖,在圖左手邊最下方有 Blink.cpp,你的 project explorer 應該也要有才對。

    回覆刪除
  10. @@我今天去請教高手,原來是他有些程式有BUG
    如果我取得HEX檔後,可以用回arduino022去燒進板子裡嗎?

    回覆刪除
  11. 有 Bug? 願聞其詳。
    取得 HEX 檔後,要用 Arduino IDE 把 HEX 檔燒進板子可能沒辦法喔!
    得用 avrdude 以下指令的方式,或是用 avrdude-GUI 才行。
    哈,剛好我之前有整理筆記,提供你參考:

    http://coopermaa2nd.blogspot.com/2011/06/avrdude-arduino-sketch.html
    http://coopermaa2nd.blogspot.com/2011/06/avrdude-gui-yuki-labjp-version.html

    回覆刪除
  12. avrdude-GUI的Programmer、Device下拉式選單都是空白@@"
    BUG問題我再詳細問高手變更步驟,再與你分享^^

    回覆刪除
  13. avrdude-GUI的Programmer、Device下拉式選單都是空白?
    我看了一下,應該是 PATH 變數沒有設定的關係。你把底下幾個路徑加到 PATH 環境變數裏就可以了:

    C:\arduino-00xx\hardware\tools\avr\bin;
    C:\arduino-00xx\hardware\tools\avr\utils\bin;
    C:\arduino-00xx\hardware\tools\avr\etc

    我把這段說明補充到這篇,謝謝你的反應:
    http://coopermaa2nd.blogspot.com/2011/06/avrdude-gui-yuki-labjp-version.html

    回覆刪除
  14. 如果寫成功會出現什麼訊息嗎?
    avrdude.exe: stk500_getsync(): not in sync: resp=0x00

    avrdude.exe done. Thank you.
    這是成功燒入的訊息嗎?

    回覆刪除
  15. 正常情況下不會有訊息
    avrdude-GUUI 底下的 progress bar 跑完就代表寫成功

    如果有跳出一個 Error 小視窗,代表沒寫成功
    大部份情況下是 baud rate 沒設正確才會出錯
    請問你用哪張 Arduino 板子,你 baud rate 設多少呢?

    這部份在「用 avrdude 燒錄 Arduino Sketch」有相關的資訊,提供你參考。

    回覆刪除
  16. 我使用uno,baud rate設為115200
    請問一下,Arduino IDE有沒有語法可以去偵測鍵盤按鍵
    例如說:偵測到A鍵被按下,然後我可以將板子的13腳送出訊息

    回覆刪除
  17. 比較快的方法是用serial通訊,我部落格有幾篇文章有提到
    avrdude-gui 還是沒試成功嗎?

    回覆刪除
  18. avrdude-gui還是沒成功...用範例產生的HEX檔燒入還是不行

    C:\arduino-00xx\hardware\tools\avr\bin;
    C:\arduino-00xx\hardware\tools\avr\utils\bin;
    C:\arduino-00xx\hardware\tools\avr\etc
    因為我有安裝WinAVR所以路徑是改成AVR的路徑底下

    回覆刪除
  19. 如果你有裝 WinAVR,那要把路徑改成 WinAVR 的路徑底下 (WinAVR 的 avrdude 在哪個子資料夾,可能要查一下)

    回覆刪除
  20. 小弟我現在再用ide撰寫,若偵測到鍵盤WSAD(上下左右)被按下則控制玩具車行進上下左右
    直至WSAD(上下左右)從按下回復到未按下,則控制玩具車不繼續行進
    我今天測試都不OK! 所以想請您指點一下迷津>"<
    以下是我撰寫的程式

    const int APin = 12; // the pin that the A is attached to
    const int DPin = 13; // the pin that the D is attached to
    const int SPin = 11; // the pin that the S is attached to
    const int WPin = 10; // the pin that the W is attached to

    int incomingByte; // a variable to read incoming serial data into

    void setup() {
    // initialize serial communication:
    Serial.begin(9600);
    // initialize the pin as an output:
    pinMode(APin, OUTPUT);
    pinMode(DPin, OUTPUT);
    pinMode(SPin, OUTPUT);
    pinMode(WPin, OUTPUT);

    }

    void loop() {
    /* digitalWrite(APin, HIGH);
    digitalWrite(DPin, HIGH);
    digitalWrite(SPin, HIGH);
    digitalWrite(WPin, HIGH);
    */
    // see if there's incoming serial data:
    if (Serial.available() > 0) {
    // read the oldest byte in the serial buffer:
    incomingByte = Serial.read();
    switch (incomingByte) {
    case 'A':
    digitalWrite(APin, HIGH);
    break;
    case 'D':
    digitalWrite(DPin, HIGH);
    break;
    case 'S':
    digitalWrite(SPin, HIGH);
    break;
    case 'W':
    digitalWrite(WPin, HIGH);
    break;
    case 'E':
    digitalWrite(WPin, HIGH);
    digitalWrite(DPin, HIGH);
    break;
    case 'Q':
    digitalWrite(WPin, HIGH);
    digitalWrite(APin, HIGH);
    break;
    case 'Z':
    digitalWrite(APin, HIGH);
    digitalWrite(SPin, HIGH);
    break;
    case 'C':
    digitalWrite(DPin, HIGH);
    digitalWrite(SPin, HIGH);
    break;
    }
    }
    else {
    incomingByte = Serial.read();
    switch (incomingByte) {
    case 'A':
    digitalWrite(APin, LOW);
    break;
    case 'D':
    digitalWrite(DPin, LOW);
    break;
    case 'S':
    digitalWrite(SPin, LOW);
    break;
    case 'W':
    digitalWrite(WPin, LOW);
    break;
    case 'E':
    digitalWrite(WPin, LOW);
    digitalWrite(DPin, LOW);
    break;
    case 'Q':
    digitalWrite(WPin, LOW);
    digitalWrite(APin, LOW);
    break;
    case 'Z':
    digitalWrite(APin, LOW);
    digitalWrite(SPin, LOW);
    break;
    case 'C':
    digitalWrite(DPin, LOW);
    digitalWrite(SPin, LOW);
    break;

    }
    }
    }

    回覆刪除
  21. 所謂測試不 OK 是指什麼? 是說 Arduino 收不到 Serial 的資 料嗎? 還是 OUTPUT pin 沒有動作?

    建議你先試一下 http://goo.gl/ynPBE 這支程式確認一下 Serial 通訊正不正常。這支程式的說明可以參考下文的「讀資料」這個段落:

    http://coopermaa2nd.blogspot.com/2011/02/arduino-serial-library.html

    回覆刪除

注意:只有此網誌的成員可以留言。