解码红外遥控信号——使用遥控器的按键来调节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)和其他传感器等, ...
随机推荐
- iOS基础 - 文本属性Attributes
NSKernAttributeName: 调整字句 kerning 字句调整 NSFontAttributeName : [UIFont systemFontOfSize:_fontSize] 设置字 ...
- spring mvc在普通类中获取HttpServletRequest对象
如题,需要在web.xml中配置request监听,如下 <listener> <description>spring request监听器</description&g ...
- [转]iOS Tutorial – Dumping the Application Memory Part 2
Source:https://blog.netspi.com/ios-tutorial-dumping-the-application-memory-part-2/ In my previous bl ...
- Unicode(UTF&UCS)深度历险
Unicode(UTF&UCS)深度历险 计算机网络诞生后,大家慢慢地发现一个问题:一个字节放不下一个字符了!因为需要交流,本地化的文字需要能够被支持. 最初的字符集使用7bit来存储字符,因 ...
- ios学习之路四(新建Sprite Kit 项目的时候出现apple LLVM 5.0 error)
在新建sprite kit 项目的时候出现"apple LLVM 5.0 error" 解决方法 在网上搜索,stackoverflow 上是这么说的点击打开链接.按照他的我也没解 ...
- C# 根据时间创建文件夹
string file = ((fileNameIndex)index).ToString(); if (!Directory.Exists(HttpContext.Current.Server.Ma ...
- 一种利用异常机制基于MVC过滤器的防止重复提交的机制分享
防止重复提交验证机制 某些时候因为系统反应稍慢,急性子用户可能不耐烦会进行重复的提交,这个操作不仅可能造成系统负担,也可能产生垃圾数据. 出现这两种状况都是我们不希望的. 为此,在公司项目系统设计了以 ...
- Hexo站点之域名配置
摘要 因为Hexo个人博客是托管在github之上,每次访问都要使用githubname.github.io这么一个长串的域名来访问,会显得非常繁琐.这个时候我们可以购买一个域名,设置DNS跳转,以达 ...
- ASP.NET DropDownList FindByValue 未将对象引用设置到对象的实例 解决方法
1.粗心把DataValueField中的字段名称写错了. 2.把DataBind()写在了FindByValue()后面了,以下代码是正确顺序: BLL.Student bllStu = new B ...
- js Get中文乱码 转码
encodeURI escape post: location.href = "ActivitiesOnSale?CurrId=" + Cid + "&CNam ...