程序开始时,提示遥控键0~4的代码,然后程序通过设置LED的亮度来对被按下的按钮作出响应,以0关闭LED,1~4提供增加的亮度。

代码如下:(需要使用IRremote库,可在库管理中搜索该库进行下载后即可使用)

#include <IRremote.h>

const int irReceiverPin = 2;
const int ledPin = 9; const int numberOfKeys = 5;
long irKeyCodes[numberOfKeys]; IRrecv irrecv(irReceiverPin);
decode_results results; void setup()
{
Serial.begin(9600);
pinMode(irReceiverPin, INPUT);
pinMode(ledPin, OUTPUT);
irrecv.enableIRIn();
learnKeycodes();
Serial.println("Press a remote key");
} void loop()
{
long key;
int brightness; if(irrecv.decode(&results))
{
// 如果接收到数据
irrecv.resume();
key = convertCodeToKey(results.value);
if(key >= 0)
{
Serial.print("Got key ");
Serial.println(key);
brightness = map(key, 0, numberOfKeys-1, 0, 255);
analogWrite(ledPin, brightness);
}
}
} // 获取遥控编码
void learnKeycodes()
{
while(irrecv.decode(&results))
// 清空缓冲区
irrecv.resume();
Serial.println("Ready to learn remote codes");
long prevValue = -1;
int i = 0;
while( i < numberOfKeys){
Serial.print("press remote key");
Serial.print(i);
while(true){
if(irrecv.decode(&results)){
if(results.value != -1 && results.value != prevValue){
showReceivedData();
irKeyCodes[i] = results.value;
i++;
prevValue = results.value;
irrecv.resume(); // 接收下一个值
break;
}
irrecv.resume(); // 接收下一个值
}
}
}
Serial.println("Learning complete");
} // 将一个遥控协议代码转为逻辑键码,如果没有收到代码返回 -1
int convertCodeToKey(long code)
{
for(int i=0; i<numberOfKeys; i++){
if(code == irKeyCodes[i]){
return i; // 找到键值返回
}
}
return -1;
} void showReceivedData()
{
if(results.decode_type == UNKNOWN){
Serial.println("-Could not decode message");
}else{
if(results.decode_type == NEC) {
Serial.print("- decode NEC:");
}else if(results.decode_type == SONY){
Serial.print("- decode SONY:");
}else if(results.decode_type == RC5){
Serial.print("- decode RC5:");
}
Serial.print("hex value = ");
Serial.println(results.value, HEX);
}
}

也可以永久的保存按键编码的值,这样就可以不需要每次程序启动时去学习。用以下代码更换irKeyCodes的声明来初始化每个键的值。

改变这些值使之遥控器的值相吻合(当你按下键时 learnKeyCodes函数会把它们显示在串行监视器中)。

long irKeyCodes[numberOfKeys] = {
0x18E758A7, // 0 键
0X18E708F7, // 1 键
0X18E78877, // 2 键
0X18E748B7, // 3 键
0X18E7C837, // 4 键
}

解码红外遥控信号——使用遥控器的按键来调节LED的亮度的更多相关文章

  1. 基于Arduino、STM32进行红外遥控信号接收

    catalogue . 遥控器原理简介 . 红外遥控原理 . 常见红外遥控器红外线信号传输协议 . 遙控器的发展 . 实验过程 . 攻击面 . 基于STM32实现红外信号解码 1. 遥控器原理简介 0 ...

  2. STM32之红外遥控信号自学习实现

    一.序言 很早前就想实现这个红外遥控自学习的这个实验,用于来自己控制房子里如空调等红外遥控设备的自动化,NEC的标准到具体的产品上可能就被厂家定义为不一样了,所以自学习就应该是接收到什么就发送什么,不 ...

  3. Arduino红外遥控系列教程2013——红外转码

    教程三:红外转码教程——用电视遥控器取代机顶盒遥控器 前言前段时间看到了使用红外遥控的X-Bot机器人[链接],感觉很有意思.最近开始玩Arduino与红外,一方面打算将来用于BOXZ的之间的通讯控制 ...

  4. 红外遥控系统原理及单片机软件解码程序,我的编写经历(C版本)

    应该说现在每一块开发板都带有红外模块,并且大都配置了相应的程序.但其实自己动手写解码程序,更能锻炼自己所学,且不谈程序写的如何,这个过程中肯定是受益良多的.现在我就把我花一下午写出的解码程序与大家分享 ...

  5. 基于FPGA的红外遥控解码与PC串口通信

    基于FPGA的红外遥控解码与PC串口通信 zouxy09@qq.com http://blog.csdn.net/zouxy09 这是我的<电子设计EDA>的课程设计作业(呵呵,这个月都拿 ...

  6. 46.Linux-分析rc红外遥控平台驱动框架,修改内核的NEC解码函数BUG(1)

    内核版本          :  Linux 3.10.14 rc红外接收类型:  GPIO 类型的NEC红外编码 本章内容 1) rc体系结构分析 2) 分析红外platform_driver平台驱 ...

  7. NEC遥控信号解码(包含完整代码)

    一.遥控器解码说明 1.遥控器的编码格式常见有两种,一种是NEC 格式,一种是RC5 格式.遥控器发出的信号,通过一个红外的接收头之后,信号被送到MCU 的一个中断引脚.通过MCU 来识别不同的时序, ...

  8. 手机遥控器,3.5mm耳机接口红外遥控改造解析

    很多家电都用红外遥控,如电视机.机顶盒.空调.电风扇等.越来越多的遥控器反而给我们带来了更多的问题,有时找不到遥控器放哪儿了,或者混淆了都是麻烦,事实上对手机进行简单的改造,可以自制一个万能红外遥控器 ...

  9. 315Mhz、433Mhz无线遥控信号的解码分析和模拟

    摘要 前段时间学习无线电的同时了解到arduino是作为技能尚未成熟技术宅的我继树莓派又一个不错的选择.于是花了200元购得3块arduino开发板(2*nano&1*uno)和其他传感器等, ...

随机推荐

  1. VS2010生成安装包制作步骤

    VS2010生成安装包制作步骤   在VS2010中文旗舰版本中生成winForm安装包,可以复制你电脑中的开发环境,避免你忘记了一下配置然后在别的机器上运行不起来.也省去了Framwork的安装. ...

  2. 自承载Web API

    自承载Web API 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html As ...

  3. Hadoop企业级应用

    Hadoop专业解决方案之构建Hadoop企业级应用 一.大数据的挑战 大数据面对挑战是你必须重新思考构建数据分析应用的方式.传统方式的应用构建是基于数据存储在不支持大数据处理的基础之上.这主要是因为 ...

  4. SQL随机生成数值字符

    1.随机生成0~N之间的数值 ROUND(RAND()*N,0) 2.随机生成Min~Max之间的数值 ROUND(RAND()*(Max-Min),0)+Min 3.随机生成大写字母 CHAR(RO ...

  5. What's New in Core Data in iOS 7

    What's New in Core Data in iOS 7 该文档主要描述coredata 在ios7的新功能特性. Core Data and iCloud 我们添加改进了对Core Data ...

  6. IceMx.Mvc 我的js MVC 框架 二、视图的数据绑定

    介绍 本人菜鸟,一些自己的浅薄见解,望各位大神指正. 本框架有以下优点 1.简单(调用简单.实现简单.不过度设计) 2.视图.控制器.模型分离(分离对于维护十分有必要) 3.组件化(每一个mvc模块儿 ...

  7. poj 3897 Maze Stretching 二分+A*搜索

    题意,给你一个l,和一个地图,让你从起点走到终点,使得路程刚好等于l. 你可以选择一个系数,把纵向的地图拉伸或收缩,比如你选择系数0.5,也就是说现在上下走一步消耗0.5的距离,如果选择系数3,也就是 ...

  8. Ecshop出现问题 includes\lib_main.php on line 1329 includes\lib_base.php on line

    php 5.3版本兼容问题不少,以上函数参数传递问题可以将lib_main.php on line 1329这句 $ext = end(explode('.', $tmp)); 改为 : $extsu ...

  9. ios-制作静态.a文件

    一.制作静态库文件 /*静态库制作*/ // MakeA.h -(NSString*)testA; // MakeA.m -(NSString*)testA{ return @"静态库测试成 ...

  10. jdk各版本新特性

    只收纳常用的新特性 jdk1.4 1.引入断言 jdk5 1.引入泛型 2.引入枚举Enum 3.可以自动拆装箱 4.引入注解Annotation 5.引入新的迭代方式foreach 6.引入静态导入 ...