LSM6DSL翻腕亮屏检测代码
LSM6DSL翻腕亮屏检测代码,使用NUCLEO-L4R5ZI板子测试配置方法参考贴子https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=541212&highlight=lsm6dsm和数据手册的2.2传感器驱动使用STMems_Standard_C_drivershttps://github.com/STMicroelectronics/STMems_Standard_C_drivers官方代码中有一种错误会导致无法设置检测X轴以外的其它轴原因在于下边函数中只读取了LSM6DSL_A_WRIST_TILT_MASK 而没有写回,需要自行修改int32_t lsm6dsl_tilt_src_set(lsm6dsl_ctx_t *ctx,lsm6dsl_a_wrist_tilt_mask_t *val)
主要配置代码void wrist_tilt(void)
{
lsm6dsl_all_sources_t lsm6dsl_all_sources;
/*
* Initialize mems driver interface
*/
dev_ctx.write_reg = platform_write;
dev_ctx.read_reg = platform_read;
dev_ctx.handle = &hi2c1;
/*
* Check device ID
*/
whoamI = 0;
lsm6dsl_device_id_get(&dev_ctx, &whoamI);
if ( whoamI != LSM6DSL_ID )
while(1); /*manage here device not found */
/*
* Restore default configuration
*/
lsm6dsl_reset_set(&dev_ctx, PROPERTY_ENABLE);
do {
lsm6dsl_reset_get(&dev_ctx, &rst);
} while (rst);
/*
* Enable Block Data Update
*/
lsm6dsl_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
//1)打开加速计,
lsm6dsl_xl_data_rate_set(&dev_ctx, LSM6DSL_XL_ODR_26Hz);
/*
* Set full scale
*/
lsm6dsl_xl_full_scale_set(&dev_ctx, LSM6DSL_2g);
//2)始能AWT,
uint8_t wrist = PROPERTY_ENABLE;
lsm6dsl_wrist_tilt_sens_set(&dev_ctx, wrist);
///3)配置AWT中断引脚,
lsm6dsl_int2_route_t lsm6dsl_int2_route;
lsm6dsl_int2_route.int2_wrist_tilt = PROPERTY_ENABLE;
lsm6dsl_pin_int2_route_set(&dev_ctx,lsm6dsl_int2_route);
///4)配置检测轴向,
lsm6dsl_a_wrist_tilt_mask_t lsm6dsl_a_wrist_tilt_mask;
lsm6dsl_a_wrist_tilt_mask.wrist_tilt_mask_zneg = PROPERTY_ENABLE;
lsm6dsl_a_wrist_tilt_mask.wrist_tilt_mask_zpos = PROPERTY_ENABLE;
lsm6dsl_tilt_src_set(&dev_ctx,&lsm6dsl_a_wrist_tilt_mask);
///5)配置阈值,
uint8_t threshold = 0x20;//1 LSB = 15.625 mg. Default value: 20h (500 mg).
lsm6dsl_tilt_threshold_set(&dev_ctx,&threshold);
///6)配置持续时间
uint8_t latency = 0x0f;//1 LSB = 40 ms. Default value: 0Fh (600 ms).
lsm6dsl_tilt_latency_set(&dev_ctx,&latency);
while(1)
{
if(int2_flag == 1)
{
int2_flag = 0;
lsm6dsl_all_sources_get(&dev_ctx,&lsm6dsl_all_sources);
if(lsm6dsl_all_sources.reg.wrist_tilt_ia.wrist_tilt_ia_zneg == 1 || lsm6dsl_all_sources.reg.wrist_tilt_ia.wrist_tilt_ia_zpos == 1)
{
snprintf(data_out, MAX_BUF_SIZE, "wrist tilt ia.\r\n");
tx_com((uint8_t*)data_out, strlen(data_out));
}
}
}
}
工程文件:**** Hidden Message *****
抬手亮屏和翻腕亮屏算法上是怎么实现的呢,谁知道 381503442 发表于 2018-8-15 15:17
抬手亮屏和翻腕亮屏算法上是怎么实现的呢,谁知道
这个是由传感器内部实现的 正好需要用到~謝謝樓主 littleshrimp 发表于 2018-8-15 16:06
这个是由传感器内部实现的
請問我照著您的代碼去設定,但是無法讓Sensor產生中斷,這其中是否是检测轴向要依照Layout的方向去設定? ialvins 发表于 2018-8-27 09:01
請問我照著您的代碼去設定,但是無法讓Sensor產生中斷,這其中是否是检测轴向要依照Layout的方向去設定?
其它方向有中断吗 littleshrimp 发表于 2018-8-27 09:25
其它方向有中断吗
試了三軸全開,怎麼甩都沒有中斷....
目前是接著燒錄器 甩動幅度不太敢太大力,
想請問版大那邊是否有測試的手法? 或者測試影片? 謝謝您
应该是沿着某个不垂直地面的轴转动 不是甩 好的謝謝您我來試試看! 很好的代码,谢谢分享
谢谢分享 谢谢分享 谢谢分享 谢谢,学习
下载试试 我也想研究下!!! 学习了 <p>有人遇到过设置AWT时候,只有使能可以写,其他几个写了没用的状态吗?</p>
<p>那个set MASK的BUG解决了,但是依然只能读,尝试过写 src, latency, threshold,写都没有报错,但读的时候发现还是原来的值,最终导致只有X轴有(从MASK上读出来只有X有一个方向设置,哪怕我尝试6个方向都设置),而func_src2 反馈的wrist_tilt_ia 位有设置,按理说从WRIST_TILT_IA能读出来是哪个方向的,但实际这个寄存器读出来都是0.</p>
<p>感觉是功能可以使能,但不能配置,只有默认X轴。</p>
英雄末路 发表于 2020-4-15 09:10
有人遇到过设置AWT时候,只有使能可以写,其他几个写了没用的状态吗?
那个set MASK的BUG解决了,但是依 ...
<p>你是自己写的代码还是使用的例程?</p>
littleshrimp 发表于 2020-4-15 10:53
你是自己写的代码还是使用的例程?
<p>reg访问是用的示例代码,其他的都是自己写的</p>
页:
[1]
2