解决Arduino ide 遇到的问题 error: 'TKD2' was not declared in this scope
今天开始学习arduino接红外接收器来接受遥控器发送的指令。控制一些外围设备。
使用简单的例子
//
///arduino接红外接收器来接受遥控器发送的指令
//这段代码来自IRremote库中examples中的 IRrecvDemo
#include //调用IRremote.h库
int RECV_PIN = 11; //定义RECV_PIN变量为11
IRrecv irrecv(RECV_PIN); //设置RECV_PIN(也就是11引脚)为红外接收端
decode_results results; //定义results变量为红外结果存放位置
void setup(){
Serial.begin(9600); //串口波特率设为9600
irrecv.enableIRIn(); //启动红外解码
}
void loop() {
//是否接收到解码数据,把接收到的数据存储在变量results中
if (irrecv.decode(&results)) {
//接收到的数据以16进制的方式在串口输出
Serial.println(results.value, HEX);
irrecv.resume(); // 继续等待接收下一组信号
}
}
//
编译发现遇到了个问题。首先一个错误是
D:\Tools\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
exit status 1
为开发板 Arduino/Genuino Uno 编译时出错。
提示我。TKD2没找到。
然后还一个问题说是找到两个IRremote的库。使用了其中一个库。
那个我们可以吧他给的路径的不是arduino ide安装目录的那个库删掉。使用arduino ide里的library提供的IRemote库来写 然而还是有这个错误。
看似是arduino ide提供的library里的一个cpp有错误。于是乎。用Notepad++打开看看。
打开错误提示的这个cpp文件。
D:\Tools\Arduino\libraries\RobotIRremote\src\IRremoteTools.cpp
#include "IRremote.h"
#include "IRremoteTools.h"
#include
int RECV_PIN = TKD2; // the pin the IR receiver is connected to
IRrecv irrecv(RECV_PIN); // an instance of the IR receiver object
decode_results results; // container for received IR codes
void beginIRremote(){
irrecv.enableIRIn(); // Start the receiver
}
bool IRrecived(){
return irrecv.decode(&results);
}
void resumeIRremote(){
irrecv.resume(); // resume receiver
}
unsigned long getIRresult(){
return results.value;
}
我们发现他有个 TKD2 这个东西。但是没有找到具体的声明或者define 然后我们找他的h头文件。
也没有 TKD2 的声明
#include "IRremote.h"
#include "IRremoteTools.h"
这两个都找了。就是没有 TKD2 这个东西。 至于
这个就不用去找了。因为这是arduino的环境带的东西。外部的library肯定不会有某个变量或者define放到这里面去。
所以 是 这个arduinio ide官方提供的这个库代码有问题????
我到官方找了反馈问题的地方。先在里面搜索了一下。有人说 1.6.7里面就有这个问题了。
然而。他们用的 要么是不知所以然的东西。要么不是用官方教程写的代码。然后一些留言回复之类的也看的不知所云。
我自己想办法修改吧。
第一种: 哪里报错修改哪里
修改报错文件的这个cpp
D:\Tools\Arduino\libraries\RobotIRremote\src\IRremoteTools.cpp
吧
修改成如下:
##include "IRremote.h"
#include "IRremoteTools.h"
#include
//int RECV_PIN = TKD2; // the pin the IR receiver is connected to
int my_RECV_PIN = 10;
IRrecv
my_irrecv(my_RECV_PIN); // an instance of the IR receiver object
decode_results
my_results; // container for received IR codes
void beginIRremote(){
my_irrecv.enableIRIn(); // Start the receiver
}
bool IRrecived(){
return
my_irrecv.decode(&my_results);
}
void resumeIRremote(){
my_irrecv.resume(); // resume receiver
}
unsigned long getIRresult(){
return
my_results.value;
}
当然。这样要是用的时候需要修改端口的。但问题是解决了,可以测试试验了。编译成功显示
///
项目使用了 3,448 字节,占用了 (10%) 程序存储空间。最大为 32,256 字节。
全局变量使用了406字节,(19%)的动态内存,余留1,642字节局部变量。最大为2,048字节。
第二种方法。最简单了。看完IRremote.h 发现根本没有引用出错的那两个文件。
IRremoteTools.h 和 IRremoteTools.cpp ,直接删除得了。
项目使用了 3,444 字节,占用了 (10%) 程序存储空间。最大为 32,256 字节。
全局变量使用了406字节,(19%)的动态内存,余留1,642字节局部变量。最大为2,048字节。
OK 改好了。
发现个问题,按下遥控键不放,一直是FFFFFFFF ,为什么,如何改进呢!?
自己看来还得解决了个问题了。