wolfcolorful 发表于 2016-7-18 17:14:41

红外遥控+数码管显示+LED灯

在论坛中学了不少时间了,自己做了一个小综合的实验:遥控器控制8个LED,“0”表示全灭,“1”表示亮第一个,“2”表示亮前两个,……,数码管上做同步显示。
参考以下教程:Arduino入门教程--第二十课--红外遥控器介绍 ;Arduino入门教程--第十八课--Arduino驱动数码管;Arduino入门教程--第一课--板载LED闪烁实验……等。
物料:Arduino Mega 2560板——1块,8段数码管(共阴极)——1个,LED——8个,1838红外发射头——1个,220欧电阻——9个,杜邦线——若干。
下面是硬件连接图:


#include <IRremote.h>// 使用IRRemote函数库
long int IR_button;
String Button_value;
int i;

const int irReceiverPin = 2;// 红外接收器的 OUTPUT 引脚接在 PIN0 接口 定义irReceiverPin变量为PIN2接口

IRrecv irrecv(irReceiverPin); // 设置irReceiverPin定义的端口为红外信号接收端口
decode_results results;    // 定义results变量为红外结果存放位置

void setup()
{
Serial.begin(9600);   // 开启串口,波特率为9600
irrecv.enableIRIn();   // 启动红外解码
for(i=3;i<=21;i++) pinMode(i,OUTPUT);
}

void loop()
{
if (irrecv.decode(&results))
{   // 解码成功,把数据放入results变量中
    // 把数据输入到串口
    //Serial.print("irCode: ");            
    //Serial.print(results.value, HEX); // 显示红外编码
    //Serial.print(",bits: ");         
    //Serial.println(results.bits); // 显示红外编码位数
    irrecv.resume();    // 继续等待接收下一组信号
    IR_button=results.value;
    //Serial.println(IR_button);
    switch (IR_button)
    {
      case 16753245:
      Button_value="CH-";
      break;
      case 16736925:
      Button_value="CH";
      break;
      case 16769565:
      Button_value="CH+";
      break;
      case 16720605:
      Button_value="|<<";
      break;
      case 16712445:
      Button_value=">>|";
      break;
      case 16761405:
      Button_value=">||";
      break;
      case 16769055:
      Button_value="-";
      break;
      case 16754775:
      Button_value="+";
      break;
      case 16748655:
      Button_value="EQ";
      break;
      case 16738455:
      Button_value="0";
      break;
      case 16750695:
      Button_value="100+";
      break;
      case 16756815:
      Button_value="200+";
      break;
      case 16724175:
      Button_value="1";
      break;
      case 16718055:
      Button_value="2";
      break;
      case 16743045:
      Button_value="3";
      break;
      case 16716015:
      Button_value="4";
      break;
      case 16726215:
      Button_value="5";
      break;
      case 16734885:
      Button_value="6";
      break;
      case 16728765:
      Button_value="7";
      break;
      case 16730805:
      Button_value="8";
      break;
      case 16732845:
      Button_value="9";
      break;
      default:
      Button_value="No Input!";
      break;
    }
    Serial.println(Button_value);
    //delay(600); //延时600毫秒,做一个简单的消抖   
}
if(Button_value=="0")
{
    for(i=3;i<=21;i++) digitalWrite(i,LOW);
    digitalWrite(15,HIGH);
    digitalWrite(14,HIGH);
    digitalWrite(19,HIGH);
    digitalWrite(20,HIGH);
    digitalWrite(21,HIGH);
    digitalWrite(16,HIGH);
    //digitalWrite(17,HIGH);
    //digitalWrite(18,HIGH);      
}
else if(Button_value=="1")   
{
    digitalWrite(3,HIGH);
    for(i=4;i<=21;i++) digitalWrite(i,LOW);
    //digitalWrite(15,HIGH);
    digitalWrite(14,HIGH);
    digitalWrite(19,HIGH);
    //digitalWrite(20,HIGH);
    //digitalWrite(21,HIGH);
    //digitalWrite(16,HIGH);
    //digitalWrite(17,HIGH);
    //digitalWrite(18,HIGH);            
}
else if(Button_value=="2")
{
    for(i=3;i<=4;i++) digitalWrite(i,HIGH);
    for(i=5;i<=21;i++) digitalWrite(i,LOW);
    digitalWrite(15,HIGH);
    digitalWrite(14,HIGH);
    //digitalWrite(19,HIGH);
    digitalWrite(20,HIGH);
    digitalWrite(21,HIGH);
    //digitalWrite(16,HIGH);
    digitalWrite(17,HIGH);
    //digitalWrite(18,HIGH);   
}
else if(Button_value=="3")
{
    for(i=3;i<=5;i++) digitalWrite(i,HIGH);
    for(i=6;i<=21;i++) digitalWrite(i,LOW);
    digitalWrite(15,HIGH);
    digitalWrite(14,HIGH);
    digitalWrite(19,HIGH);
    digitalWrite(20,HIGH);
    //digitalWrite(21,HIGH);
    //digitalWrite(16,HIGH);
    digitalWrite(17,HIGH);
    //digitalWrite(18,HIGH);
}
else if(Button_value=="4")
{
    for(i=3;i<=6;i++) digitalWrite(i,HIGH);
    for(i=7;i<=21;i++) digitalWrite(i,LOW);
    //digitalWrite(15,HIGH);
    digitalWrite(14,HIGH);
    digitalWrite(19,HIGH);
    //digitalWrite(20,HIGH);
    //digitalWrite(21,HIGH);
    digitalWrite(16,HIGH);
    digitalWrite(17,HIGH);
    //digitalWrite(18,HIGH);
}
else if(Button_value=="5")
{
    for(i=3;i<=7;i++) digitalWrite(i,HIGH);
    for(i=8;i<=21;i++) digitalWrite(i,LOW);
    digitalWrite(15,HIGH);
    //digitalWrite(14,HIGH);
    digitalWrite(19,HIGH);
    digitalWrite(20,HIGH);
    //digitalWrite(21,HIGH);
    digitalWrite(16,HIGH);
    digitalWrite(17,HIGH);
    //digitalWrite(18,HIGH);
}
else if(Button_value=="6")
{
    for(i=3;i<=8;i++) digitalWrite(i,HIGH);
    for(i=9;i<=21;i++) digitalWrite(i,LOW);
    //digitalWrite(15,HIGH);
    //digitalWrite(14,HIGH);
    digitalWrite(19,HIGH);
    digitalWrite(20,HIGH);
    digitalWrite(21,HIGH);
    digitalWrite(16,HIGH);
    digitalWrite(17,HIGH);
    //digitalWrite(18,HIGH);
}
else if(Button_value=="7")
{
    for(i=3;i<=9;i++) digitalWrite(i,HIGH);
    for(i=10;i<=21;i++) digitalWrite(i,LOW);
    digitalWrite(15,HIGH);
    digitalWrite(14,HIGH);
    digitalWrite(19,HIGH);
    //digitalWrite(20,HIGH);
    //digitalWrite(21,HIGH);
    //digitalWrite(16,HIGH);
    //digitalWrite(17,HIGH);
    //digitalWrite(18,HIGH);
}
else if(Button_value=="8")
{
    for(i=3;i<=10;i++) digitalWrite(i,HIGH);
    for(i=11;i<=21;i++) digitalWrite(i,LOW);
    digitalWrite(15,HIGH);
    digitalWrite(14,HIGH);
    digitalWrite(19,HIGH);
    digitalWrite(20,HIGH);
    digitalWrite(21,HIGH);
    digitalWrite(16,HIGH);
    digitalWrite(17,HIGH);
    //digitalWrite(18,HIGH);
}
/*else
{
    for(i=3;i<=12;i++) digitalWrite(i,LOW);
    for(i=14;i<=21;i++) digitalWrite(i,HIGH);
    delay(2000);
}*/
}





LOVE_KE 发表于 2016-7-18 22:32:42

小伙 把这些代码敲出来也不错啊!

wolfcolorful 发表于 2016-7-19 09:11:02

LOVE_KE 发表于 2016-7-18 22:32 static/image/common/back.gif
小伙 把这些代码敲出来也不错啊!

见笑,见笑!
本业是做机械的,跟着论坛的前辈们照猫画虎,略有所得吧。
页: [1]
查看完整版本: 红外遥控+数码管显示+LED灯