MM32F3273G8P火龙果开发板MindSDK开发教程15 - 获取msa311加速器的方向改变事件

2023-11-16

MM32F3273G8P火龙果开发板MindSDK开发教程15 - 获取msa311加速器的方向改变事件

1、功能描述

类似手机里横屏竖屏检测,当方向发生变化时,横屏竖屏自动切换。
当msa311方向改变时,会产生中断,然后从寄存器Reg 0x0C(Orientation _Status) 中读取现在设备的方位。
有这几种可能,
1、 orientation value of z axis, 0:upward looking
orientation value of x/y axes
00: portrait upright
01: portrait upside down
10: landscape left,
11: landscape right

2、orientation value of z axis, 1:downward looking
orientation value of x/y axes
00: portrait upright
01: portrait upside down
10: landscape left,
11: landscape right

2、寄存器设置

在这里插入图片描述
这个寄存器可以设置orient功能的一些特性,但是我没有设置,保持默认值。
在这里插入图片描述
当中断产生后,读取09寄存器,bit6 一直都是0,所以程序里没有判断bit6的状态。
在这里插入图片描述
中断产生后,读取0x0C寄存器的值,从来判断模块的具体方位。

3、中断处理函数

void handle_int_message(void)
{
    uint8_t state;
    uint8_t orient_state;
    bool bRet;
    bRet = Msa311_ReadReg(MSA311_REG_MOTIONINT,&state);
    bRet = Msa311_ReadReg(MSA311_REG_ORIENTATION_STATUS,&orient_state);

	if (bRet == false)
	{
		perror("Msa311_GetInterrupt1Enable read error\n");
		return;
    }

    if (state & (1 << MSA311_S_TAP_INT_STATE))
    {
        printf("this is s_tap \r\n");
    }
    else if (state & (1 << MSA311_D_TAP_INT_STATE))
    {
        printf("this is d_tap \r\n");
    }
    else if (state & (1<< MSA311_ACTIVE_INT_STATE))
    {
        printf("this is active\r\n");
    }

    if (orient_state & 1<< 6)
    {
        printf("downward looking ");

        if ((orient_state & 0x30)>>4 == 0)
        {
            printf(" portrait upright \r\n");   
        }
        else if ((orient_state & 0x30)>>4 == 1)
        {
            printf(" portrait upside down \r\n");   
        }
        else if ((orient_state & 0x30 ) >> 4 == 2)
        {
            printf(" landscape left \r\n") ;  
        }
        else if ((orient_state & 0x30 ) >> 4 == 3)
        {
            printf(" landscape right \r\n");   
        }
    }
    else
    {
        printf("  upward looking  ");
        if ((orient_state & 0x30 ) >> 4 == 0)
        {
            printf(" portrait upright \r\n");   
        }
        else if ((orient_state & 0x30)>>4 == 1)
        {
            printf(" portrait upside down \r\n");   
        }
        else if ((orient_state & 0x30 ) >> 4 == 2)
        {
            printf(" landscape left \r\n") ;  
        }
        else if ((orient_state & 0x30 ) >> 4 == 3)
        {
            printf(" landscape right \r\n");   
        }
    }
}

4、现象

当改变msa311方位时,会打印出msa311相对于人眼视角的方位角度打印。
在这里插入图片描述

5、代码

代码下载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MM32F3273G8P火龙果开发板MindSDK开发教程15 - 获取msa311加速器的方向改变事件 的相关文章

  • ply补全为立方体_PLY 文件结构

    典型的 PLY 文件结构 头部 顶点列表 面片列表 其他元素列表 头部是一系列以回车结尾的文本行 用来描述文件的剩余部分 头部包含一个对每个元素类型的描述 包括元素名 如 边 这个元素在工程里有多少 以及一个与这个元素关联的不同属性的列表
  • 第八章 假设检验

    目录 一 假设检验的基本概念 假设及假设检验的定义 原假设与备择假设 基本思想 接受域与拒绝域 假设检验的分类 两类错误 二 一个正态总体下的参数假设检验 期望 方差的假设检验 三 两个正态总体下的参数假设检验 期望的差异性 方差的差异性的
  • 【H5】 svg的 defs用法 渐变

    defs defs元素用于预定义一个元素使其能够在SVG图像中重复使用 在元素中定义的图形不会直接显示在SVG图像上 要显 示它们需要使用元素来引入它们 symbol 元素用于定义可重复使用的符号 嵌入在元素中的图形是不会被直接显示 的 除
  • 前端高频面试题汇总(css,html)

    目录 H5 的新特性有哪些 C3 的新特性有哪些 如何使一个盒子水平垂直居中 如何实现双飞翼 圣杯 布局 CSS 的盒模型 CSS 中选择器的优先级以及 CSS 权重如何计算 列举 5 个以上的 H5 input 元素 type 属性值 C

随机推荐