解码红外遥控信号——使用遥控器的按键来调节LED的亮度
程序开始时,提示遥控键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的亮度的更多相关文章
- 基于Arduino、STM32进行红外遥控信号接收
catalogue . 遥控器原理简介 . 红外遥控原理 . 常见红外遥控器红外线信号传输协议 . 遙控器的发展 . 实验过程 . 攻击面 . 基于STM32实现红外信号解码 1. 遥控器原理简介 0 ...
- STM32之红外遥控信号自学习实现
一.序言 很早前就想实现这个红外遥控自学习的这个实验,用于来自己控制房子里如空调等红外遥控设备的自动化,NEC的标准到具体的产品上可能就被厂家定义为不一样了,所以自学习就应该是接收到什么就发送什么,不 ...
- Arduino红外遥控系列教程2013——红外转码
教程三:红外转码教程——用电视遥控器取代机顶盒遥控器 前言前段时间看到了使用红外遥控的X-Bot机器人[链接],感觉很有意思.最近开始玩Arduino与红外,一方面打算将来用于BOXZ的之间的通讯控制 ...
- 红外遥控系统原理及单片机软件解码程序,我的编写经历(C版本)
应该说现在每一块开发板都带有红外模块,并且大都配置了相应的程序.但其实自己动手写解码程序,更能锻炼自己所学,且不谈程序写的如何,这个过程中肯定是受益良多的.现在我就把我花一下午写出的解码程序与大家分享 ...
- 基于FPGA的红外遥控解码与PC串口通信
基于FPGA的红外遥控解码与PC串口通信 zouxy09@qq.com http://blog.csdn.net/zouxy09 这是我的<电子设计EDA>的课程设计作业(呵呵,这个月都拿 ...
- 46.Linux-分析rc红外遥控平台驱动框架,修改内核的NEC解码函数BUG(1)
内核版本 : Linux 3.10.14 rc红外接收类型: GPIO 类型的NEC红外编码 本章内容 1) rc体系结构分析 2) 分析红外platform_driver平台驱 ...
- NEC遥控信号解码(包含完整代码)
一.遥控器解码说明 1.遥控器的编码格式常见有两种,一种是NEC 格式,一种是RC5 格式.遥控器发出的信号,通过一个红外的接收头之后,信号被送到MCU 的一个中断引脚.通过MCU 来识别不同的时序, ...
- 手机遥控器,3.5mm耳机接口红外遥控改造解析
很多家电都用红外遥控,如电视机.机顶盒.空调.电风扇等.越来越多的遥控器反而给我们带来了更多的问题,有时找不到遥控器放哪儿了,或者混淆了都是麻烦,事实上对手机进行简单的改造,可以自制一个万能红外遥控器 ...
- 315Mhz、433Mhz无线遥控信号的解码分析和模拟
摘要 前段时间学习无线电的同时了解到arduino是作为技能尚未成熟技术宅的我继树莓派又一个不错的选择.于是花了200元购得3块arduino开发板(2*nano&1*uno)和其他传感器等, ...
随机推荐
- Enumerable和yield
说说IEnumerable和yield IEnumerable数据类型是我比较喜欢的数据类型,特别是其强类型IEnumerable<T>更获得Linq的支持使得代码看起来更加优雅.整洁. ...
- GNU 项目(开源社区的由来,背后的哲学)
转自译言网:http://article.yeeyan.org/view/88497/59257/ 第一个软件共享社区 当我在1971年开始在麻省理工人工智能实验室工作时, 我成为一个已经存在多年的软 ...
- 输出一个string的所有排列情况
问题: 1.加入输入是{a,b,c}; 2.输出abc,acb,bac,bca,cab,cba; 代码描述: 1.递归遍历所有情况 2.方法FUN输入为:要排列的字符串char inp[];inp[] ...
- asp.net内部原理3
asp.net内部原理(三) 第三个版本 (最详细的版本) 前言: 今天继续吧这个系列补齐,这几天公司的项目比较忙,回到家已经非常的累了,所以也没顾得上天天来这里分享一些东西和大家一起探讨,但是今天晚 ...
- Ogre源码编译教程
最近突然发现Ogre引擎更新到2.1版本了,既然依旧是代码开源,本着学习的精神就下载下来弄弄.但是官网提供的SDK版本只有1.9的,考虑到学习的便利性,因此最好从Source版本开始弄,这样的话以后想 ...
- oracle中backup模式
在数据库打开的情况下备份(归档模式),把表空间或者数据库置于backup 模式下, 如: SQL> alter database begin backup; Database altered ...
- C++函数调用
C++函数调用(1) 这篇博客名字起得可能太自大了,搞得自己像C++大牛一样,其实并非如此.C++有很多隐藏在语法之下的特性,使得用户可以在不是特别了解的情况下简单使用,这是非常好的一件事情.但是有时 ...
- C# 操作 Excel 常见问题收集和整理
C# 操作 Excel 常见问题收集和整理(定期更新,欢迎交流) 经常会有项目需要把表格导出为 Excel 文件,或者是导入一份 Excel 来操作,那么如何在 C# 中操作 Excel 文件成了一个 ...
- POJ 3348 Cows
题目大意: 给你n棵树,可以用这n棵树围一个圈,然后在圈里面可以养牛,每个牛需要50平方米的空间,问最多可以养多少牛? 其实就是求一个凸包,计算凸包面积,然后除以50,然后就得到答案,直接上模板了. ...
- Java的23种设计模式
1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡翅”就行了.麦当劳和肯德基就是生产鸡 ...