liang647 发表于 2013-7-4 15:14:56

用红外遥控器控制数码管

    作为新手,今天练习了弘毅大哥和强哥教程里的红外遥控器一节,并做了一点小改进,使用红外遥控器控制数码管显示。实现用0~1在数码管上显示0~1,用“+”“-”显示下一个数和上一个数,用播放键循环播放0到9的功能。由于初学,代码略显冗长,而且一些功能也不完善,比如暂停。在这里把实现贴出来,求喷以求进步。
    首先,数码管的1-10号针脚(详情请见http://www.geek-workshop.com/thread-2038-1-1.html)除3、8号外,分别对应ARDUINO上6、5、3、2、4、7、8、9端口。3号接口接3v3供电。红外接收器out脚接11端口实现通信。具体连线如图。
    代码如下,总共定义了遥控器上的13个按键,具体请看注释。#include <IRremote.h>
/*************************
IRreceiver
*************************/
const int irRecPin = 11;//定义红外信号接收引脚
IRrecv irrecv(irRecPin);
decode_results results;

//定义红外遥控器每个按键发射的红外码,可以按照弘毅大哥的教程里的方式在串口监视器中查看确定
long codes =
{
0xFF6897,
0xFF30CF, 0xFF18E7, 0xFF7A85,
0xFF10EF, 0xFF38C7, 0xFF5AA5,
0xFF42BD, 0xFF4AB5, 0xFF52AD,
0xFFE01F, 0xFFA857, 0xFFC23D
};
/************************
Digital cube
************************/
//定义数码管的开关状态实现数字显示
int digits =
{
{1,0,0,0,0,0,0,1},//0
{1,0,0,1,1,1,1,1},//1
{1,1,0,0,0,0,1,0},//2
{1,0,0,0,1,0,1,0},//3
{1,0,0,1,1,1,0,0},//4
{1,0,1,0,1,0,0,0},//5
{1,0,1,0,0,0,0,0},//6
{1,0,0,1,1,0,1,1},//7
{1,0,0,0,0,0,0,0},//8
{1,0,0,0,1,0,0,0} //9
};
int currentDigit = 0;//用来保存当前数字
void digitWrite(int digit)//用来显示数字
{
for(int pin = 2; pin <= 9 ; pin++)
    digitalWrite(pin, digits);
}
/**************************
Launch up
**************************/
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();

for(int i = 2 ; i <= 9 ; i++)
{
    pinMode(i, OUTPUT);
    digitalWrite(i, HIGH);
}
}

void loop()
{
if(irrecv.decode(&results))
{   
    for(int i = 0 ; i <=13 ; i++)
    {
//0~9按键对应显示0~9
      if(results.value == codes && i <= 9)
      {
      digitWrite(i);
      currentDigit = i;
      break;
      }
//“-”按键对应显示上一个数字
      else if(results.value == codes && currentDigit != 0)
      {
      currentDigit--;
      digitWrite(currentDigit);
      break;
      }
//“+“对应显示下一个数字
      else if(results.value == codes && currentDigit != 9)
      {
      currentDigit++;
      digitWrite(currentDigit);
      break;
      }
//“播放”对应循环播放0~9
      else if(results.value == codes && stat == 0)
      {
      for(int j = 0 ; j <= 9 ; j++)
      {
          digitWrite(j);
          currentDigit = j;
          delay(500);
      }
      }
    }
//可在串口监视器查看红外码
    Serial.print(results.value, HEX);
    Serial.println();
//等待接收下一个信号
    irrecv.resume();
}
delay(600);
}

江大学子 发表于 2013-11-16 20:40:55

谢谢分享,想用遥控器控制蜂鸣器发出不同的音
页: [1]
查看完整版本: 用红外遥控器控制数码管