當使用Arduino IDE 1.5.7時(應該早自1.5.5 r2便有此錯誤),若想使用紅外線程式庫IRremote,光是底下這短短的草稿碼:
#include <IRremote.h>
void setup() {
}
void loop() {
}
就會出現底下的編譯錯誤訊息(若選擇「Arduino Robot Control」以外的板子):
path-to-arduino\libraries\RobotIRremote\src\IRremoteTools.cpp:5:16: error: 'TKD2' was not declared in this scope
int RECV_PIN = TKD2; // the pin the IR receiver is connected to
原因在於,Arduino IDE 1.5.5 r2開始加入一套縮減版的IRremote程式庫,名為RobotIRremote,更動了不少東西,但有些地方卻沒變(譬如檔名),以至於起衝突。
此錯誤的詳細情況,大致如此:想使用自行安裝的IRremote,但Arduino IDE卻以內建的RobotIRremote為優先;RobotIRremote的檔案IRremoteTools.cpp需要TKD2的腳位定義,而只有「Arduino Robot Control」板子的腳位定義檔裡才有TKD2這玩意兒,如此一來,就會發生上述的錯誤訊息。
解決之法:
- 若你想使用自己安裝的IRremote,而且不是使用Arduino Robot Control板子,那就乾脆把path-to-arduino-1.5.x\libraries\RobotIRremote整個移除算了。
- 也可以自行更改RobotIRremote裡的檔名,並連帶修改相關程式碼,解決衝突;較為困難,屬於暫時性解法,照理說應該由Arduino官方開發團隊修改。
- 若想使用內建的RobotIRremote,目前似乎只有Arduino Robot Control板能用;要不然就要自己修改程式庫。
參考資料: