我有一些代码,可以用来通过 arduino nano 和 IR LED 关闭和打开电视。效果很好。但是,我想在 uno r4 wifi 上运行它,以便可以远程控制它。当我将相同的代码上传到 uno r4 时,我收到此错误:(我将其放在一个块中,这样阅读起来就不那么糟糕了。
/*
/Users/-/Documents/Arduino/libraries/IRremote/irISR.cpp:18:5: error: expected constructor, destructor, or type conversion before '(' token
ISR (TIMER_INTR_NAME)
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp: In member function 'void IRrecv::enableIRIn()':
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:105:2: error: 'cli' was not declared in this scope
cli();
^~~
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:105:2: note: suggested alternative: 'cbi'
cli();
^~~
cbi
In file included from /Users/-/Documents/Arduino/libraries/IRremote/IRremote.h:24:0,
from /Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:1:
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:236:3: error: 'TCCR2A' was not declared in this scope
TCCR2A = _BV(WGM21); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:110:2: note: in expansion of macro 'TIMER_CONFIG_NORMAL'
TIMER_CONFIG_NORMAL();
^~~~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:236:16: error: 'WGM21' was not declared in this scope
TCCR2A = _BV(WGM21); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:110:2: note: in expansion of macro 'TIMER_CONFIG_NORMAL'
TIMER_CONFIG_NORMAL();
^~~~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:236:12: error: '_BV' was not declared in this scope
TCCR2A = _BV(WGM21); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:110:2: note: in expansion of macro 'TIMER_CONFIG_NORMAL'
TIMER_CONFIG_NORMAL();
^~~~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:236:12: note: suggested alternative: '_B'
TCCR2A = _BV(WGM21); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:110:2: note: in expansion of macro 'TIMER_CONFIG_NORMAL'
TIMER_CONFIG_NORMAL();
^~~~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:237:3: error: 'TCCR2B' was not declared in this scope
TCCR2B = _BV(CS21); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:110:2: note: in expansion of macro 'TIMER_CONFIG_NORMAL'
TIMER_CONFIG_NORMAL();
^~~~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:237:16: error: 'CS21' was not declared in this scope
TCCR2B = _BV(CS21); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:110:2: note: in expansion of macro 'TIMER_CONFIG_NORMAL'
TIMER_CONFIG_NORMAL();
^~~~~~~~~~~~~~~~~~~
In file included from /Users/-/Documents/Arduino/libraries/IRremote/IRremote.h:24:0,
from /Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:1:
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp: In member function 'void IRsend::mark(int)':
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:210:30: error: 'TCCR2A' was not declared in this scope
#define TIMER_ENABLE_PWM (TCCR2A |= _BV(COM2B1))
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:24:2: note: in expansion of macro 'TIMER_ENABLE_PWM'
TIMER_ENABLE_PWM; // Enable pin 3 PWM output
^~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:237:16: note: suggested alternative: 'CS'
TCCR2B = _BV(CS21); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:110:2: note: in expansion of macro 'TIMER_CONFIG_NORMAL'
TIMER_CONFIG_NORMAL();
^~~~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:238:3: error: 'OCR2A' was not declared in this scope
OCR2A = TIMER_COUNT_TOP / 8; \
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:110:2: note: in expansion of macro 'TIMER_CONFIG_NORMAL'
TIMER_CONFIG_NORMAL();
^~~~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:239:3: error: 'TCNT2' was not declared in this scope
TCNT2 = 0; \
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:110:2: note: in expansion of macro 'TIMER_CONFIG_NORMAL'
TIMER_CONFIG_NORMAL();
^~~~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:210:44: error: 'COM2B1' was not declared in this scope
#define TIMER_ENABLE_PWM (TCCR2A |= _BV(COM2B1))
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:24:2: note: in expansion of macro 'TIMER_ENABLE_PWM'
TIMER_ENABLE_PWM; // Enable pin 3 PWM output
^~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:239:3: note: suggested alternative: 'SCNx32'
TCNT2 = 0; \
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:110:2: note: in expansion of macro 'TIMER_CONFIG_NORMAL'
TIMER_CONFIG_NORMAL();
^~~~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:212:30: error: 'TIMSK2' was not declared in this scope
#define TIMER_ENABLE_INTR (TIMSK2 = _BV(OCIE2A))
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:113:2: note: in expansion of macro 'TIMER_ENABLE_INTR'
TIMER_ENABLE_INTR;
^~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:212:43: error: 'OCIE2A' was not declared in this scope
#define TIMER_ENABLE_INTR (TIMSK2 = _BV(OCIE2A))
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:113:2: note: in expansion of macro 'TIMER_ENABLE_INTR'
TIMER_ENABLE_INTR;
^~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:212:39: error: '_BV' was not declared in this scope
#define TIMER_ENABLE_INTR (TIMSK2 = _BV(OCIE2A))
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:113:2: note: in expansion of macro 'TIMER_ENABLE_INTR'
TIMER_ENABLE_INTR;
^~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:210:40: error: '_BV' was not declared in this scope
#define TIMER_ENABLE_PWM (TCCR2A |= _BV(COM2B1))
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:24:2: note: in expansion of macro 'TIMER_ENABLE_PWM'
TIMER_ENABLE_PWM; // Enable pin 3 PWM output
^~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:210:40: note: suggested alternative: '_B'
#define TIMER_ENABLE_PWM (TCCR2A |= _BV(COM2B1))
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:24:2: note: in expansion of macro 'TIMER_ENABLE_PWM'
TIMER_ENABLE_PWM; // Enable pin 3 PWM output
^~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp: In member function 'void IRsend::space(int)':
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:211:30: error: 'TCCR2A' was not declared in this scope
#define TIMER_DISABLE_PWM (TCCR2A &= ~(_BV(COM2B1)))
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:35:2: note: in expansion of macro 'TIMER_DISABLE_PWM'
TIMER_DISABLE_PWM; // Disable pin 3 PWM output
^~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:212:39: note: suggested alternative: '_B'
#define TIMER_ENABLE_INTR (TIMSK2 = _BV(OCIE2A))
^
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:113:2: note: in expansion of macro 'TIMER_ENABLE_INTR'
TIMER_ENABLE_INTR;
^~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:117:2: error: 'sei' was not declared in this scope
sei(); // enable interrupts
^~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:211:46: error: 'COM2B1' was not declared in this scope
#define TIMER_DISABLE_PWM (TCCR2A &= ~(_BV(COM2B1)))
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:35:2: note: in expansion of macro 'TIMER_DISABLE_PWM'
TIMER_DISABLE_PWM; // Disable pin 3 PWM output
^~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/irRecv.cpp:117:2: note: suggested alternative: 'sbi'
sei(); // enable interrupts
^~~
sbi
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:211:42: error: '_BV' was not declared in this scope
#define TIMER_DISABLE_PWM (TCCR2A &= ~(_BV(COM2B1)))
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:35:2: note: in expansion of macro 'TIMER_DISABLE_PWM'
TIMER_DISABLE_PWM; // Disable pin 3 PWM output
^~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:211:42: note: suggested alternative: '_B'
#define TIMER_DISABLE_PWM (TCCR2A &= ~(_BV(COM2B1)))
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:35:2: note: in expansion of macro 'TIMER_DISABLE_PWM'
TIMER_DISABLE_PWM; // Disable pin 3 PWM output
^~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp: In member function 'void IRsend::enableIROut(int)':
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:213:30: error: 'TIMSK2' was not declared in this scope
#define TIMER_DISABLE_INTR (TIMSK2 = 0)
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:54:2: note: in expansion of macro 'TIMER_DISABLE_INTR'
TIMER_DISABLE_INTR; //Timer2 Overflow Interrupt
^~~~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:218:2: error: 'TCCR2A' was not declared in this scope
TCCR2A = _BV(WGM20); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:64:2: note: in expansion of macro 'TIMER_CONFIG_KHZ'
TIMER_CONFIG_KHZ(khz);
^~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:218:29: error: 'WGM20' was not declared in this scope
TCCR2A = _BV(WGM20); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:64:2: note: in expansion of macro 'TIMER_CONFIG_KHZ'
TIMER_CONFIG_KHZ(khz);
^~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:218:25: error: '_BV' was not declared in this scope
TCCR2A = _BV(WGM20); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:64:2: note: in expansion of macro 'TIMER_CONFIG_KHZ'
TIMER_CONFIG_KHZ(khz);
^~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:218:25: note: suggested alternative: '_B'
TCCR2A = _BV(WGM20); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:64:2: note: in expansion of macro 'TIMER_CONFIG_KHZ'
TIMER_CONFIG_KHZ(khz);
^~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:219:2: error: 'TCCR2B' was not declared in this scope
TCCR2B = _BV(WGM22) | _BV(CS20); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:64:2: note: in expansion of macro 'TIMER_CONFIG_KHZ'
TIMER_CONFIG_KHZ(khz);
^~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:219:29: error: 'WGM22' was not declared in this scope
TCCR2B = _BV(WGM22) | _BV(CS20); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:64:2: note: in expansion of macro 'TIMER_CONFIG_KHZ'
TIMER_CONFIG_KHZ(khz);
^~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:219:42: error: 'CS20' was not declared in this scope
TCCR2B = _BV(WGM22) | _BV(CS20); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:64:2: note: in expansion of macro 'TIMER_CONFIG_KHZ'
TIMER_CONFIG_KHZ(khz);
^~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:219:42: note: suggested alternative: 'CS'
TCCR2B = _BV(WGM22) | _BV(CS20); \
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:64:2: note: in expansion of macro 'TIMER_CONFIG_KHZ'
TIMER_CONFIG_KHZ(khz);
^~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:220:2: error: 'OCR2A' was not declared in this scope
OCR2A = pwmval; \
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:64:2: note: in expansion of macro 'TIMER_CONFIG_KHZ'
TIMER_CONFIG_KHZ(khz);
^~~~~~~~~~~~~~~~
/Users/-/Documents/Arduino/libraries/IRremote/IRremoteInt.h:221:2: error: 'OCR2B' was not declared in this scope
OCR2B = pwmval / 3; \
^
/Users/-/Documents/Arduino/libraries/IRremote/irSend.cpp:64:2: note: in expansion of macro 'TIMER_CONFIG_KHZ'
TIMER_CONFIG_KHZ(khz);
^~~~~~~~~~~~~~~~
exit status 1
Compilation error: exit status 1
*/
这是我上传的代码:
#include <IRremote.h>
int LED = 13;
IRsend irsend;
void setup() {
pinMode(LED, OUTPUT);
pinMode(7,INPUT_PULLUP);
}
void loop() {
if (digitalRead(7) == HIGH){
digitalWrite(LED, HIGH);
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xa90, 12); // 12 bit wide Sony TV power code
delay(40);
}
}
else digitalWrite(LED, LOW);
delay(100);
}
有谁知道为什么代码在 nano 上运行良好但在上传到 uno r4 时出现此错误?非常感谢。
IRremote 库应该与 Uno R4 完全兼容,您可能拥有旧版本或与 https://www.arduino.cc/reference/en/libraries/irremote/
中列出的版本不同的版本我通过选择 Uno R4 Minima 尝试了你的代码,只需要安装 IRremote 库(在“Sketch”->“添加库”->“管理库”(或 CTRL+SHIFT+I)中,然后输入“irremote”)搜索并安装)。
Using library IRremote at version 4.3.0 in folder: C:\Users\m\Documents\Arduino\libraries\IRremote
"C:\\Users\\m\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4/bin/arm-none-eabi-size" -A "C:\\Users\\m\\AppData\\Local\\Temp\\arduino\\sketches\\D52ECE48380979A802CA96953101D2E8/sketch_mar14a.ino.elf"
Sketch uses 54668 bytes (20%) of program storage space. Maximum is 262144 bytes.
Global variables use 4960 bytes (15%) of dynamic memory, leaving 27808 bytes for local variables. Maximum is 32768 bytes.