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 會不會如預期不斷地閃爍。

參考資料

23 意見:

小黑 提到...

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

coopermaa 提到...

那個 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。

Unknown 提到...

嗯嗯 我找到了,非常感謝您^^

coopermaa 提到...

You're welcome. :)

Unknown 提到...

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

coopermaa 提到...

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

Unknown 提到...

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

coopermaa 提到...

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

小黑 提到...

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

coopermaa 提到...

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

小黑 提到...

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

coopermaa 提到...

有 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

小黑 提到...

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

coopermaa 提到...

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

小黑 提到...

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

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

coopermaa 提到...

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

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

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

小黑 提到...

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

coopermaa 提到...

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

coopermaa 提到...

Seial 通訊相關文章:

Arduino 筆記 – 透過 Serial 通訊控制 LED
Arduino 筆記 – Serial Library 介紹

小黑 提到...

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的路徑底下

coopermaa 提到...

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

小黑 提到...

小弟我現在再用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;

}
}
}

coopermaa 提到...

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

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

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