lizhihua233 发表于 2015-9-9 18:06:07

【新手求助】关于连续按键问题

我想用红外遥控器控制LED,效果是按任意键一次为长亮(除了电源键);按两次闪烁;按三次为呼吸灯。

这是我参考的红外遥控代码,求大神们帮个忙。跪谢了!!!
/**************************************************************
**红外遥控LED
*
**原理介绍:irrecv.enableIRIn()启动红外解码后,这时候IRrecv对象
* 会在后台接收红外线信号。接着就可以利用decode()函数持续检查,
* 看看有没有解码成功。irrecv.decode(&results)解码成功,这个函
* 数会返回true,并把结果放在results里面,在解码一个红外线信号之
* 后,要运行resume()函数,这样才会持续接收下一组信号。
* 可以先利用这个程序解析出所使用遥控的编码,然后根据所得到的编
* 码,修改程序实现所需的功能。解析出的编码数值是unsigned long,
* 注意一下,在判决的时候用0x ******判定是否是某个按键。
*
**实验说明:按下遥控器的电源按钮,LED灭,按下静音按钮,LED亮
*
* BY YFRobot
***************************************************************/
#include <IRremote.h>



int RECV_PIN = 11;   //红外线接收器OUTPUT端接在pin 11
int LED = 10;      // 定义LED引脚为10

IRrecv irrecv(RECV_PIN);   // 定义IRrecv 对象来接收红外线信号
decode_results results;   //解码结果放在decode_results构造的对象results里


void irdisplay(unsigned long value)//按下按键后,显示本遥控对应的按键
{
switch(value){         //判定按下的是哪个按键,串口显示按钮名称
case 0xFFA25D:
    Serial.println("POWER");
    digitalWrite(LED, LOW);          //电源键按下,执行关闭LED灯
    break;
case 0xFF629D:
    Serial.println("Mode");
    break;
case 0xFFE21D:
    Serial.println("MUTE");
    digitalWrite(LED, HIGH);      //静音键按下,执行点亮LED灯
    break;
   
//其他按键
case 0xFF22DD:
    Serial.println("PLAY/PAUSE");
    break;
case 0xFF02FD:
    Serial.println("PREV");
    break;
case 0XFFC23D:
    Serial.println("NEXT");
    break;
case 0xFFE01F:
    Serial.println("EQ");
    break;
case 0xFFA857:
    Serial.println("-");
    break;
case 0xFF906F:
    Serial.println("+");
    break;
case 0xFF6897:
    Serial.println("0");
    break;
case 0xFF9867:
    Serial.println("BACK");
    break;
case 0xFFB04F:
    Serial.println("U/SD");
    break;
case 0xFF30CF:
    Serial.println("1");
    break;
case 0xFF18E7:
    Serial.println("2");
    break;
case 0xFF7A85:
    Serial.println("3");
    break;
case 0xFF10EF:
    Serial.println("4");
    break;
case 0xFF38C7:
    Serial.println("5");
    break;
case 0xFF5AA5:
    Serial.println("6");
    break;
case 0xFF42BD:
    Serial.println("7");
    break;
case 0xFF4AB5:
    Serial.println("8");
    break;
case 0xFF52AD:
    Serial.println("9");
    break;
}
}
void setup()
{
pinMode(LED,OUTPUT);          // 定义LED为输出引脚
Serial.begin(9600);          //开启串口通信,并设定波特率为9600
irrecv.enableIRIn();          //启动红外解码
}
void loop() {
if (irrecv.decode(&results))
{
    //解码成功,收到一组红外线信号
    irdisplay(results.value);   
    irrecv.resume();         
}   
}

pzg123 发表于 2015-9-10 21:36:14

本帖最后由 pzg123 于 2015-9-10 21:39 编辑

int num=0;
void loop() {
if (irrecv.decode(&results))
{
    //解码成功,收到一组红外线信号
    irdisplay(results.value);   
    if(results.value != 0xFFA25D)
    {
      num++;
      if(num>3) num = 1;
      switch(num)
      {
      case 1: 函数1
         break;
      case 2: 函数2
      break;
      case 3: 函数3
         break;
      }
    }
    irrecv.resume();         
}   
}

lizhihua233 发表于 2015-9-26 17:15:36

pzg123 发表于 2015-9-10 21:36 static/image/common/back.gif
int num=0;
void loop() {
if (irrecv.decode(&results))


:loveliness: thanks!!!!
页: [1]
查看完整版本: 【新手求助】关于连续按键问题