树莓派下Java实现红外接收-创新互联

树莓派下Java实现红外接收 1.前言

因为技术路线限定,需要通过Java实现在树莓派下用CHQ1838红外接收器获取到红外遥控器的输入。对Java下控制树莓派的红外接收进行了一些技术探索,通过多次尝试最后实现了相关功能,在此记录一下填坑的过程。

创新互联公司成立于2013年,先为庐山等服务建站,庐山等地企业,进行企业商务咨询服务。为庐山企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。2.最初思路:仿单片机程序实现

因早已在单片机上实现过红外接收头接收遥控器的输入,结合对红外接收头的时序的了解,构思了最初的实现思路。
CHQ1838红外接收器时序图
仿照单片机程序的实现,通过延长度时判断输入管脚的高低电平来获取到输入值是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进行运行测试程序验证,按下遥控器相应按钮获取的输出键值均正确。
IR接收验证

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章名称:树莓派下Java实现红外接收-创新互联
分享网址:http://ybzwz.com/article/cdgsih.html