arm自作室内人群检测驱动,人流进出检测驱动+应用

人群检测,人流进出构思

想在门口只做一个检测人流量的多少,和监控室内进出人群
就用一个人体红外感应器来触发中断,用两个红外传感器来判断人是进入还是出去(不用光敏电阻,不够灵敏)
大概就是这样检测,因为人体红外的广域检测,红外传感是直线的,所以人体红外来触发中断

构思示意图

在这里插入图片描述

连线示意图

在这里插入图片描述
三个gpio口,两个负责红外的输入检测,一个负责人体的中断

代码上手

硬件连接

在这里插入图片描述
使用这三个gpio接口,图中红色的接口好像已经被占用,强行转换输出会报错

驱动编写poll中断
设置等待队列

在这里插入图片描述

设置定时器

poll中断的特色,没有中断发生,到时间也会自己查询
在这里插入图片描述

设置中断函数

在里面进行有中断发生的时候,对io口的检测,判断人的进出
在这里插入图片描述

按键初始化

初始化三个口为输出口,其中为一个口注册中断---->上升沿才触发(说明有人来了才会开始检测)
在这里插入图片描述

大概就是这些改动,其他的都是根据按键驱动进行的改写

app应用编写

在里面copy_form_user() 对人来人往进行检测,判断人的走向,统计人的数量
在这里插入图片描述

代码

写的不是很完整,很多冗余的,但是能用,改改还是很美观
buttondrv.c

 /*************************************************
 *头文件
 *************************************************/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/poll.h>
#include <linux/sched.h>
#include <linux/irq.h>
#include <asm/irq.h>
#include <asm/io.h>
#include <linux/interrupt.h>
#include <asm/uaccess.h>
#include <linux/platform_device.h>
#include <linux/cdev.h>
#include <linux/miscdevice.h>
#include <linux/gpio.h>
 
#include <asm/mach-types.h>
#include <asm/gpio.h>
#include <asm/delay.h>
#include <mach/gpio.h>
#include <mach/soc.h>
#include <mach/platform.h>
 
 
#define DEVICE_NAME		"gecBt"                //设备名字
static int get_number ;
 
 //按键结构体
 struct button_desc {
   
	 int gpio;
	 int number;
	 char *name; 
	 struct timer_list timer;
	 int  right_and_left;
 };
 
 //按键的管脚,编号,名字
 static struct button_desc buttons[] = {
   
	{
    (PAD_GPIO_B + 9 ), 0, "KEY0" },//B9
	{
    (PAD_GPIO_B + 29), 1, "KEY1" },//人体红外
	//{ (PAD_GPIO_B + 9), 2, "KEY2" },//左边 第四个
	//{ (PAD_GPIO_A + 28), 3, "KEY3" },//右边 第三个
 };
 
 //赋按键的初始值
 static volatile int key_values[] = {
   
	 2, 2, 2, 2
 };
 
 //等待队列申请
 static DECLARE_WAIT_QUEUE_HEAD(button_waitq);
 
 static volatile int ev_press = 0; //判断中断的发生
 
 /*************************************************
 *定时器
 *************************************************/
 static void x6818_buttons_timer(unsigned long _data)
 {
   
	 struct button_desc *bdata = (struct button_desc *)_
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值