树莓派下Java实现红外接收-创新互联
因为技术路线限定,需要通过Java实现在树莓派下用CHQ1838红外接收器获取到红外遥控器的输入。对Java下控制树莓派的红外接收进行了一些技术探索,通过多次尝试最后实现了相关功能,在此记录一下填坑的过程。
创新互联公司成立于2013年,先为庐山等服务建站,庐山等地企业,进行企业商务咨询服务。为庐山企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。2.最初思路:仿单片机程序实现因早已在单片机上实现过红外接收头接收遥控器的输入,结合对红外接收头的时序的了解,构思了最初的实现思路。
仿照单片机程序的实现,通过延长度时判断输入管脚的高低电平来获取到输入值是0还是1,以下是之前在单片机使用中断实现的代码。
//由波形判断收到信号,确认IR信号出现
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delay(1);}
for (j=0;j<4;j++)//收集四组数据
{for (k=0;k<8;k++)//每组数据有8位
{ while (IRIN)//等 IR 变低电平,跳过4.5ms的前导高电平信号
{delay(1);}
while (!IRIN)//等 IR 变为高电平
{delay(1);}
while (IRIN) //计算IR高电平时长
{ delay(1);
N++;
if (N>=30)//过长
{EX0=1;return;}//0.14ms计数过长自动离开。
}//高电平计数完毕
IRCOM[j]=IRCOM[j] >>1;//数据最高位补“0”
if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}//数据最高位补“1”
N=0;
}
}
确定了这个思路后就开工,通过Java下的Pi4j对树莓派的IO口进行控制,刚开始实现就发现了难题,因为Java的没办法实现红外接收时序中微秒范围内的严格定时限制,所以根本无法获取到正常的红外输入。
3.另辟蹊径:新的构思此路不通只能另寻他法,通过搜索也没有找到任何Java下的实现方法。别无他路,只能从源头开始思考,树莓派各种介绍标准获取红外输入方法都是通过安装lirc,配置后,通过mode2测试获取到红外的输入。
mode2 -d /dev/lirc0
穷尽所有的办法后,唯一思路只能Java调用mode2获取其输出的信息,通过输出的信息值来截取判断红外接收到的输入。
4.站巨人肩:修改实现重新确定思路后,再次开工,正准备写时无意中在Pi4j的pi4j-example-crowpi中发现有Java接收红外输入的demo,CrowPi是一款集成树莓派的和具备一些常用模块的学习机,其本质还是树莓派,pi4j-example-crowpi是Pi4j专门针对其的例子。研究了一下其中的红外接收实现与自己构思的思路一致,真是英雄所见略同!
原demo的地址详见Pi4j
https://github.com/Pi4J/pi4j-example-crowpi
实现类在\src\main\java\com\pi4j\crowpi\components\IrReceiverComponent.java
调用验证在\src\main\java\com\pi4j\crowpi\applications\IrReceiverApp.java
下面下载链接是个人经过修改的代码实现,如有需要可自行下载
https://download.csdn.net/download/ccxx12589/87338760
翻译了其中的注释,修改为适应Java1.8的实现,注释了log减少了依赖,整合为单个文件即可实现接收功能。
在树莓派下使用IDEA进行运行测试程序验证,按下遥控器相应按钮获取的输出键值均正确。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享题目:树莓派下Java实现红外接收-创新互联
文章起源:http://pwwzsj.com/article/cdgsih.html