程序开始时,提示遥控键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. CLR中的垃圾回收机制

    CLR中采用代(generation)来作为其垃圾回收的一种机制,其唯一的目的是提升程序的性能.基予代的垃圾回收器有以下假设: ·对象越新,其生存周期越短. ·对象越老,其生存周期越长. ·回收堆的一 ...

  2. 【转】jQuery each函数中的continue及break

    continue :return true; break :return false; 也可以利用return即可跳出jQuery 来源:http://bie.xiaowangge.info/brow ...

  3. [转]Even when one byte matters

    Source:http://kernelbof.blogspot.jp/2009/07/even-when-one-byte-matters.html Common Vulnerabilities a ...

  4. MVC 5显示、创建、编辑、删除等功能实练

    MVC 5显示.创建.编辑.删除等功能实练 在前天的学习小结中<15天学习MVC后的小结(分享经历与想法)>http://www.cnblogs.com/insus/p/3369870.h ...

  5. SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)

    挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是自动备份数据库,一键还原数据库,发送备份数据库日志报告到邮箱,自动压缩备份好的数据库 定期执行数 ...

  6. jquery.validate.unobtrusive.js实现气泡提示mvc错误

    改写jquery.validate.unobtrusive.js实现气泡提示mvc错误 个人对于这个js.css不是很擅长,所以这个气泡提醒的样式网上找了下,用了这个http://www.cnblog ...

  7. xhEditor入门基础

    一.下载最新版本xhEditor:http://xheditor.com/download  (官网无法下载,CSDN提供下载:http://download.csdn.net/detail/itmy ...

  8. HTTP header 介绍

    HTTP(Hyper Text Transfer Protocol)是超文本传输协议的缩写,它用于传送www方式的数据.HTTP协议采用了请求/响应模型.客服端向服务器发送一个请求,请求头包含请求的方 ...

  9. 获取Portal中POWL程序的APPLID

    获取Portal中POWL程序的APPLID 今天做练习的时候跟 Leader 学了一招,当不知道集成在 Portal 中 POWL 程序的 APPLID 的时候,可以在类 CL_POWL_MODEL ...

  10. Castle Windsor 项目中快速使用

    Castle Windsor 项目中快速使用 新建项目如下: 一个模型类,一个接口,一个实现方法.我的目的很明确就是在UI层通过Castle 调用数据访问层的方法. 添加项目引用 CastleDemo ...