chaoser 发表于 2013-8-24 18:50:26

入门级实验:用LED表示遥控器按下了哪个按键

本帖最后由 chaoser 于 2013-8-24 18:54 编辑

好久没上了,为了表示歉意,来个入门教程第二十课的扩展实验吧。
原帖见这里:Arduino入门教程--第二十课--红外遥控器介绍

实验目的:用遥控器遥控LED明灭

实现方式:
  为了直观兼简单,打算使用三组LED来表示遥控器按下了哪一个按键。遥控器与原帖中的相同。
  第1组:三个绿灯,用二进制表示第1~7行;
  第2组:两个黄灯,用二进制表示第1~3列;
  第3组:一个红灯,表示解码错误。

原理图:

连线图:(注意:实际使用的红外线接收器与楼主相同,引脚依此为VOUT、GND、VCC。由于找不到相应的元件图,就用了这个代替,其引脚依此为GND、VCC、VOUT。实际连接时请注意调整。)

源程序:
#include <IRremote.h>
const int irPin=12;
IRrecv irrecv(irPin);
decode_results irRes;

// 根据遥控器按键所在行列位置,建立键值对比数组。各遥控器键值不同,请自测修改。
long remote={16753245, 16736925, 16769565,
                   16720605, 16712445, 16761405,
                   16769055, 16754775, 16748655,
                   16738455, 16750695, 16756815,
                   16724175, 16718055, 16743045,
                   16716015, 16726215, 16734885,
                   16728765, 16730805, 16732845};

void setup() {
for (int i=2; i<=12; i++) pinMode(i,OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn();
}

void loop() {
int stat=0;
if (!irrecv.decode(&irRes)) return;    // 红外接收不成功则重新开始
Serial.print("ircode: ");
Serial.println(irRes.value);    // 监控窗口输出。以上两行无实际意义,可以不要
for (int i=1; i<=7; i++) {    // 判断哪个按键被按下,调用过程点亮相应LED
    for (int j=1; j<=3; j++) {
      if (remote==irRes.value) {
      light(i,j);
      stat=1;
      }
    }
}
if (stat==0) light(0,0);    // 如果没有匹配键值,则点亮红灯以示警告
irrecv.resume();
delay(500);
}

void light(int x, int y) {      // 点亮LED以显示遥控器按键所在行列
int x1=2; int x2=3; int x3=4;
int y1=5; int y2=6; int z1=8;    // 定义各行列所连接的数字口,具体见原理图
for (int i=2; i<=10; i++) digitalWrite(i,0);    // 初始化,LED全灭
if (x==0 && y==0) {    // 点亮警告红灯
    digitalWrite(z1,1);
    return;
}
if (x==1 || x==3 || x==5 || x==7) digitalWrite(x1,1);    // 以下三行点亮行标示灯
if (x==2 || x==3 || x==6 || x==7) digitalWrite(x2,1);
if (x==4 || x==5 || x==6 || x==7) digitalWrite(x3,1);
if (y==1 || y==3) digitalWrite(y1,1);    // 以下两行点亮列标示灯
if (y==2 || y==3) digitalWrite(y2,1);
}

最终效果很不错,瞎按一个按键,就可以从LED上判断出按了哪个。light函数再细化一下,就可以当做具体的遥控器控制程序了。

祝大家玩的开心!

chqiyi 发表于 2013-8-24 21:29:24

很好的入门例程,大大的支持楼主!
页: [1]
查看完整版本: 入门级实验:用LED表示遥控器按下了哪个按键