2012年4月29日 星期日

Arduino Introduction 簡報

我整理了一份介紹 Arduino 的簡報,這份簡報說明什麼是 Arduino、各種 Arduino 板子與相容板、各式各樣的擴充模組與感測器,最後簡介 Arduino 的各式應用,希望可以讓更多朋友知道 Arduino 能做什麼應用。

2012年4月15日 星期日

如何讓 IRRemote 支援 ATmega2560?

要怎麼讓 IRRemote Library 可以支援 ATmega2560 呢?方法是編輯 IRRemoteInt.h,搜尋底下字串:

defined(__AVR_ATmega1280__)

把所有出現的地方改成這樣:

defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)

或是直接用我已經改好的版本:

https://github.com/coopermaa/Arduino-IRremote

除了更新 Library 外,還有一件事要特別注意,當你在使用紅外線發射功能的時候,紅外線發射器必須接到 ATmega2560 的 pin 9 才行。

image
▲ Arduino Uno 或 Duemilanove 的板子: 紅外線發射器要接到 pin 3

image
▲ Arduino Mega 1280 或 Mega 2560 的板子: 紅外線發射器要接到 pin 9

參考資料

Arduino 1.0 的 ArduinoISP 無法運作的解法

Arduino-0022 的 ArduinoISP 我已經用了很久都沒碰到問題,在升級到 Arduino 1.0 後,我發現當我用 Arduino 1.0 上傳 ArduinoISP 後,居然沒辦法燒錄 target board,每次都會出現這個錯誤訊息:

avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0x64
avrdude: stk500_cmd(): programmer is out of sync

image

如果切回 Arduino-0022 然後重新上傳 ArduinoISP,就又可以燒錄 target board。

比較 Arduino-1.0 和 Arduino-0022 兩個版本的 ArduinoISP,程式碼是一樣的,所以很可能是 Arduino-1.0 的 library 做了什麼改變導致 ArduinoISP 無法正常運作。果然,Issue 661 提到了這個問題,正是因為 Arduino-1.0 HardwareSerial.cpp 把 SERIAL_BUFFER_SIZE 從原來的 128 改成 64,導致 ArduinoISP 發生 buffer overflow。