esp32红外线控制led灯的开关
今天学习了一个红外线模块,红外线的按键都被定义为16进制的值,用这个值进行if分支语句执行,今天有好多不明白的,应该学学C语言,但是大家都说挺难的,但是不学C的写法,就不能改代码,尤其这个IDE编码时只是简单的报个错,错误在哪产生的不能直观的知道. 急需解决的问题 1 IRremote是什么 2 irrecv是个什么类 3 为什么要用results来接收值
#include <IRremote.h> //头文件
const int irReceiverPin =17; //红外遥控接收头控制管脚GP17
const int led1Pin = 13; //板载LED灯管脚GP13
const int led2Pin =25; //设置2号led灯的控制引脚为25号
const int led3Pin = 26; //设置3号led灯的控制引脚为26号
IRrecv irrecv(irReceiverPin); //创建一个IRrecv类型的变量
decode_results results; //导入results方法接收遥控器输入值
void setup()
{
Serial.begin(9600); //初始化串行
pinMode(led1Pin,OUTPUT); //设置led1Pin为OUTPUT
pinMode(led2Pin, OUTPUT); //设置led1Pin为OUTPUT
pinMode(led3Pin, OUTPUT); //设置led1Pin为OUTPUT
irrecv.enableIRIn(); //启用红外接收模块
}
void loop()
{
if (irrecv.decode(&results)) //如果红外接收模块接收数据
{
Serial.print("irCode: "); //输出打印文本"irCode: "
Serial.print(results.value, HEX); //按照16进制输出打印resules的值(接收到遥控器按键的值)
Serial.print(", bits: "); //输出打印文本" , bits: "
Serial.println(results.bits); //输出打印resules的 bits
irrecv.resume(); //清空恢复irrecv函数接收下一个值(这里应该叫停止接收红外线值更合适,要不值会一遍一遍的不停接收)
Serial.print(results.value, HEX); //测irrecv中是否还有值(测试结果还是有上次的值)
}
delay(600); //delay 600ms
if(results.value == 0xFF6897) //如果接收模块接收到 0xFF6897
{
digitalWrite(led1Pin,HIGH); //打开led灯
}
else if(results.value == 0xFF18E7) //如果接收模块接收到 0xFF18E7
{
digitalWrite(led2Pin,HIGH); //打开led灯
}
else if(results.value == 0xFF7A85) //如果接收模块接收到 0xFF7A85
{
digitalWrite(led3Pin,HIGH); //打开led灯
}
else
{
digitalWrite(led1Pin,LOW); //关掉led灯
digitalWrite(led2Pin,LOW); //关掉led灯
digitalWrite(led3Pin,LOW); //关掉led灯
}
}
