新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 简单手势唤醒便携设备的设计思路及其代码

简单手势唤醒便携设备的设计思路及其代码

作者: 时间:2012-07-12 来源:网络 收藏


检测门限也影响最大允许速率。一般来说,门限越低,能够捕捉到的手势动作就越快。如上所述,应谨慎选择门限,以免产生误报。

人为因素


这种应用还会受到人手以及挥手动作等人为因素的影响。应通过一些案例确定一般大多数人的习惯,包括他们在屏幕前挥动手掌的速度以及与屏幕之间的距离,另外,是否戴手套也会产生一定的影响。不同的应用场合(不同装置)也会影响到设计需求,例如智能手机、或汽车仪表盘,对存在具体的设计考虑。当然,设计过程中还应考虑用户界面和经验参数。


最后,还要对真假手势做出判断,即装置需要判断接收到的信号是来自于一个手势动作,还是简单的装置移动(例如:放置在外套、口袋或背包中,或者是屏幕朝下放置)。单纯依靠上述检测原理,很难做出正确的“真伪”鉴别,除非在装置内提供更多的背景信息。关于这一问题的讨论超出了本文范围。


设计中可以选择只有装置进入特定的应用程序时启动唤醒方案,也可以由用户手动操作使能。此外,许多此类装置都有一个加速度传感器,能够检测到屏幕是否背面朝下放置。如果用户手动将装置置于休眠模式,则可禁用该功能(例如关机状态)。


设计实例


为方便起见,本文附带了三段演示程序代码。第一段代码用于手动操作MAX44000的接近检测数据读取,概念上简单实现唤醒功能;第二段代码在第一段的基础上进行了扩展,增加了之前讨论的滤波功能;最后一段代码演示利用MAX44000中断唤醒触控装置。

示例代码1

__interrupt void TimedInterrupt( void )

{


uint8 proximity_counts;

....

....

if ( device_status == SLEEP_MODE )

{

// read one byte from register 0x16

proximity_counts = read_i2c_register(MAX44000_ADDR,0x16,1);

if (proximity_counts > WAKEUP_THRESHOLD)

{

device_status = WAKE_MODE;

...

}

else

{

// do whatever it is you need to in sleep mode

...

...

}

}


...

...


}


示例代码2


// example interrupt function where this might be implemented

__interrupt void TimedInterrupt( void )

{


uint8 proximity_counts;

uint8 filtered_counts;

....

....

if ( device_status == SLEEP_MODE )

{

// read one byte from register 0x16

proximity_counts = read_i2c_register(MAX44000_ADDR,0x16,1);


// weights[QUEUE_SIZE] contains the filter weights for the FIR filter

// data_queue[QUEUE_SIZE] is a FIFO queue meant to be the input to the filter

filtered_counts = fir_filter(proximity_counts,weights,data_queue);


if (filtered_counts > WAKEUP_THRESHOLD)

{

device_status = WAKE_MODE;

...

}

else

{

// do whatever it is you need to in sleep mode

...

...

}

}


...

...


}


/**

* fir_filter()

*



评论


相关推荐

技术专区

关闭