yuqingshan 发表于 2016-3-26 18:35:32

请教各位大侠IR红外线如何实现单一键“开”或“关”功能

近日网上拍如下红外线控制器,准备用MEGA2560+IR做LED开关控制,网上一些程序,但只能实现单一“开”或“关”功能,
现想实现单一键“开”或“关”功能,请教该部分的代码如何写?谢谢!


程序:
/*
www.openjumper.com
日期:2013.5.18
IDE 版本:1.0.1
功能:红外遥控器控制LED灯开关
*/
       
#include <IRremote.h>
       
int RECV_PIN = 11; // 红外一体化接收头连接到Arduino 11号引脚
int LEDpin = 13; //定义LED输出引脚
IRrecv irrecv(RECV_PIN);
       
decode_results results; // 用于存储编码结果的对象
       
void setup()
{
pinMode(LEDpin,OUTPUT);
irrecv.enableIRIn(); // 初始化红外解码
}
       
void loop() {
if (irrecv.decode(&results))
{
Serial.println( results.value);
if( results.value == 0xFF22DD) //若接收到按键A+(CH1)按下的指令,打开LED
{
digitalWrite(LEDpin,HIGH);
}
else if(results.value == 0xFFE01F) //接收到按键B-(CH2)按下的命令,关闭LED
{
digitalWrite(LEDpin,LOW);
}
irrecv.resume(); // 接收下一个编码
}
}

//功能收到按键A+(CH1)按下的指令,打开LED;接收到按键B-(CH2)按下的命令,关闭LED

林定祥 发表于 2016-3-26 21:35:36

设置一个全局变量,在初始化是置0,在loop中收到某键,如电源键信号时,将变量置“反”,即判断是0就置1,判断是1就置0,输出的LED可以根据变量的变化而变,如0变暗,1变亮这样也给电源键指示出状态。

Ansifa 发表于 2016-3-26 21:51:10

#include <IRremote.h>
int State = 0;
int RECV_PIN = 11; // 红外一体化接收头连接到Arduino 11号引脚
int LEDpin = 13; //定义LED输出引脚
IRrecv irrecv(RECV_PIN);

decode_results results; // 用于存储编码结果的对象

void setup()
{
        Serial.begin(9600);
        pinMode(LEDpin, OUTPUT);
        irrecv.enableIRIn(); // 初始化红外解码
}
void loop()
{
        if (irrecv.decode(&results))
        {
                Serial.println(results.value, HEX);
                if ( results.value == 0xFF22DD) //若接收到按键A+(CH1)按下的指令,打开LED
                {
                        State = !State;
                        digitalWrite(LEDpin, State);
                }
                irrecv.resume(); // 接收下一个编码
        }
}

yuqingshan 发表于 2016-3-27 20:13:22

哦,原来布尔运算符类!(非)可以解决了,我想了头多大,没有想出来,还要好好学习,谢谢前面两位的指导!谢谢了!
页: [1]
查看完整版本: 请教各位大侠IR红外线如何实现单一键“开”或“关”功能