概述

做个笔录,最近项目使用了此款gsensor,实现了简单示例

一、环境

硬件平台(RTL8762DK)
        IDE:keil5.29

1)、原理图

二、代码:

1、kx022.h

#include "rtl876x_i2c_wristband.h"
#include "os_timer.h"
#include "os_sched.h"
#include "stdio.h"
#define     KX022_7BITI2C_ADDRESS   0x1E
#define     KX022_CHIP_ID           0x0F
#define     KX022_XOUT_L            0x06
#define     KX022_CNTL1             0x18
#define     KX022_CNTL2             0x3B
#define     KX022_CNTL3             0x1A
#define     KX022_ODCNTL            0x1B
#define     KX022_CTRL_REG1         0x19
#define     KX022_TILT_TIMER        0x22
#define     KX022_WUFC              0x23#define     KX022_INS2              0x13
#define     KX022_INT_REL           0x17
#define     KX022_INC1              0x1C
#define     KX022_INC2              0x1D
#define     KX022_INC4              0x1F
#define     KX022_ATH               0x30

2、kx022.c

void KX022_1020_Delay_ms(uint16_t delay_time)
{os_delay(delay_time);
}uint8_t KX022_1020_I2C_Write(uint8_t reg, uint8_t dat)
{uint8_t I2C_WriteBuf[2] = {0x0, 0x0};I2C_WriteBuf[0] = reg;I2C_WriteBuf[1] = dat;uint32_t time_out = SYSTEM_IIC_TIMEROUT;while ((I2C_GetFlagState(HRS_I2C_BUS, I2C_FLAG_TFE) == RESET) && (--time_out != 0));time_out = SYSTEM_IIC_TIMEROUT;while ((I2C_GetFlagState(HRS_I2C_BUS, I2C_FLAG_MST_ACTIVITY) == SET) && (--time_out != 0));I2C_SetSlaveAddress(HRS_I2C_BUS, KX022_7BITI2C_ADDRESS);I2C_MasterWrite(HRS_I2C_BUS, I2C_WriteBuf, 2);if (time_out == 0) {RtkWristbandSys.flag_field.i2c_bus_lock = true;}return 0;
}uint8_t KX022_1020_I2C_Read(uint8_t reg, uint8_t *buf, uint8_t len)
{uint8_t tmp_buffer[1] = {0};uint32_t time_out = SYSTEM_IIC_TIMEROUT;tmp_buffer[0] = reg;while ((I2C_GetFlagState(HRS_I2C_BUS, I2C_FLAG_TFE) == RESET) && (--time_out != 0));time_out = SYSTEM_IIC_TIMEROUT;while ((I2C_GetFlagState(HRS_I2C_BUS, I2C_FLAG_MST_ACTIVITY) == SET) && (--time_out != 0));I2C_SetSlaveAddress(HRS_I2C_BUS, KX022_7BITI2C_ADDRESS);I2C_Status ret = I2C_RepeatRead(HRS_I2C_BUS, tmp_buffer, 1, buf, len);if (time_out == 0) {RtkWristbandSys.flag_field.i2c_bus_lock = true;}if (ret != I2C_Success) {return 1;}return 0;
}uint8_t KX022_1020_Write_Reg(uint8_t regAddr, uint8_t data)
{return KX022_1020_I2C_Write(regAddr, data);
}uint8_t KX022_1020_Read_Reg(uint8_t regAddr, uint8_t *buf)
{return KX022_1020_I2C_Read(regAddr, buf, 1);
}uint8_t KX022_1020_MultiRead_Reg(uint8_t regAddr, uint8_t *buf, uint8_t len)
{   return KX022_1020_I2C_Read(regAddr, buf, len);
}void * m_kx022_gsensor_timer = NULL;
#define     ACCELERATION    16384               //In terms of accelerationvoid kx022_getData(int16_t *outData)
{uint8_t  data_reg[6] = {0};/* Read register data */KX022_1020_MultiRead_Reg(KX022_XOUT_L, data_reg, 6);/* Get high 16bits data */outData[0] = (int16_t)(data_reg[0] | data_reg[1] << 8);   outData[1] = (int16_t)(data_reg[2] | data_reg[3] << 8);          outData[2] = (int16_t)(data_reg[4] | data_reg[5] << 8);
}static void kx022_timerout_handler(void *pxTimer)
{   #if 0T_IO_MSG sensor_msg = {.type = HUB_MSG_GSENSOR, .subtype = GSENSOR_MSG_DEBUG,};send_msg_to_hub_task(&sensor_msg, __LINE__);#elsefloat accX;float accY;float accZ;int16_t acc_data[3] = {0};kx022_getData(acc_data);DBG_LOG("*2* acc_x:%d, acc_y:%d, acc_z:%d", acc_data[0], acc_data[1], acc_data[2]);   accX = (float)acc_data[0]/ACCELERATION;    accY = (float)acc_data[1]/ACCELERATION;    accZ = (float)acc_data[2]/ACCELERATION;    DBG_LOG("*3* ax:%f, ay:%f, az:%f", accX, accY, accZ); #endif
}static void kx022_wake_up_init(void)
{uint8_t int_rel;DBG_LOG("kx02x wake_up_init init");KX022_1020_Write_Reg(KX022_CNTL1,0x00);   //CNTL1 0x18 standbyKX022_1020_Delay_ms(30);          // delay 30msKX022_1020_Write_Reg(KX022_CNTL3,0x06); //CNTL3 0x1A 0x06  motion detect 50HZ ODRKX022_1020_Write_Reg(KX022_INC2,0x7f);  //INC2 0x1D  0x7F enable 6KX022_1020_Write_Reg(KX022_WUFC,0x02);  //WUFC 0x23 0x02  wakeup delay timeKX022_1020_Write_Reg(KX022_ATH,0x02);   //ATH  0x30 0x02  wakeup KX022_1020_Write_Reg(KX022_INC1,0x30);  //INC1 0x1C 0x30  enable INT1 pinKX022_1020_Write_Reg(KX022_INC4,0x02);  //INC4 0x1F 0x02  wakeup INT1 pinKX022_1020_Read_Reg(KX022_INT_REL, &int_rel);  //INT_REL 0x17 KX022_1020_Write_Reg(KX022_CNTL1,0xc2); //CNTL1 0x18 0xc2, ,+/-2g, enable wakeup
}static void kx022_wake_up_check(void)
{uint8_t ins2_value, int_rel;KX022_1020_Read_Reg(KX022_INS2, &ins2_value);  //INS2(0x13),bit1 1:0DBG_LOG("ins2_value = %d", ins2_value);if(ins2_value & 0x02) {DBG_LOG("ins2_value = %d", ins2_value);}KX022_1020_Read_Reg(KX022_INT_REL, &int_rel);  //INT_REL 0x17
}static void kx022_sleep(void)
{}static void kx022_gsensor_init(void)
{uint8_t KX022_ID = 0;KX022_1020_Read_Reg(KX022_CHIP_ID, &KX022_ID);if (KX022_ID != 0x14) {DBG_LOG("* gsensor kx022_chip_Fail: 0x%x", KX022_ID);    } DBG_LOG("* gsensor kx022_chip_id: 0x%x", KX022_ID); DBG_LOG("testData:%f, %.2f, %.2f, %.2f", 1.222, -0.121, 0.001123, 100.0011333);#if 0KX022_1020_Write_Reg(KX022_CNTL1, 0x00);KX022_1020_Delay_ms(30);KX022_1020_Write_Reg(KX022_ODCNTL, 0x03);KX022_1020_Write_Reg(KX022_CNTL1, 0xc0);KX022_1020_Delay_ms(50); #elseKX022_1020_Write_Reg(KX022_CNTL1, 0x00);KX022_1020_Delay_ms(30);KX022_1020_Write_Reg(KX022_CNTL1, 0x41);//2gKX022_1020_Delay_ms(5);KX022_1020_Write_Reg(KX022_ODCNTL, 0x02);KX022_1020_Delay_ms(5);KX022_1020_Write_Reg(KX022_CNTL3, 0xD8);KX022_1020_Delay_ms(5);KX022_1020_Write_Reg(KX022_TILT_TIMER, 0x01);KX022_1020_Delay_ms(5);KX022_1020_Write_Reg(KX022_CNTL1, 0xc1);KX022_1020_Delay_ms(30); #endif
}static void kx022_gsensor_timer_create(void)
{if (m_kx022_gsensor_timer == NULL) {os_timer_create(&m_kx022_gsensor_timer, "m_kx022_gsensor_timer", 1, 500, true, kx022_timerout_handler);}os_timer_start(&m_kx022_gsensor_timer);
}

三、运行结果:

四、总结

希望能帮助到有用的人。

KX022-1020(罗姆-加速度传感器)示例相关推荐

  1. 传感器 Sensor 加速度【示例】

    简介 坐标系 x轴:从左到右 y轴:从下到上 z轴:从内到外 这个坐标系与Android 2D API中的不同,传感器中的返回值都以此坐标系为准. SENSOR_TYPE_ACCELEROMETER  ...

  2. android 获取加速度传感器值,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...

    本文实例讲述了Android开发获取传感器数据的方法.分享给大家供大家参考,具体如下: package mobile.android.sensor; import java.util.List; im ...

  3. android开发中磁场传感器,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...

    本文实例讲述了Android开发获取传感器数据的方法.分享给大家供大家参考,具体如下: package mobile.android.sensor; import java.util.List; im ...

  4. linux加速度传感器校准,加速度传感器校准方法及装置与流程

    本申请涉及传感器校准领域,具体而言,涉及一种加速度传感器校准方法及装置. 背景技术: 在移动终端中,导航软件的使用频率越来越高,比如说百度地图.高德导航等.目前,移动终端通常包含加速度传感器,在导航过 ...

  5. 与众不同 windows phone (18) - Device(设备)之加速度传感器, 数字罗盘传感器

    原文:与众不同 windows phone (18) - Device(设备)之加速度传感器, 数字罗盘传感器 [索引页] [源码下载] 与众不同 windows phone (18) - Devic ...

  6. 高通 android 传感器支持,Android加速度传感器数值的过滤

    加速度传感器测量设备的加速度,包括重力加速度.以下代码展示了如何获取缺省的加速度传感器的一个实例: private SensorManager mSensorManager; private Sens ...

  7. Android指南针之加速度传感器地磁传感器-android学习之旅(67)

    由于andorid不推荐用传统的方向传感器,推荐用加速度传感器和地磁传感器来构造得到方向传感器的数据,其实主要是z轴的旋转角度 具体代码示例 代码如下 public class MainActivit ...

  8. 树莓派基础实验31:MPU6050陀螺仪加速度传感器实验

    一.介绍    MPU6050是世界上第一款也是唯一一款专为智能手机.平板电脑和可穿戴传感器的低功耗.低成本和高性能要求而设计的6轴运动跟踪设备.    它集成了3轴MEMS陀螺仪,3轴MEMS加速度 ...

  9. 基于MPU6050三轴陀螺仪和三轴加速度传感器姿态识别实验

    虽然这里已经提供了获取陀螺仪与加速度相关数据的Arduino示例代码 ,但怎么用这些数据来展现当前的姿态却也还是个问题:后来看到关于ITG3205与ADXL345的姿态识别帖子,然后抄过来一试,效果还 ...

最新文章

  1. Python人脸识别+手机推送,老板来了你就会收到短信提示
  2. ssh 配置:在 Linux 中 ssh 配置无密码登陆完整步骤以及易错点分析
  3. 开放外链后,阿里旗下多个App已接入微信支付:更方便了
  4. 【SQL】IN、EXISTS和表连接三者的效率比较
  5. 非旋转Treap及可持久化[Merge,Split]
  6. jvm内存分析和cpu耗时分析
  7. 光立方体c语言程序,444光立方程序怎么写 光立方原理图、源代码及制作教程
  8. 软件测试思维总结(1)-----比较思维:利用好可参照的资源
  9. ArcGIS中shp文件的裁剪
  10. narwal机器人_Narwal云鲸智能扫拖机器人,会自己洗拖布
  11. Flutter代码可插拨/解耦方案
  12. matlab正序零序负序,正序负序零序的理解
  13. c++读取文本中文乱码
  14. 前端工程师面试问题归纳(一、问答类html/css/js基础)
  15. 撤销博士学位!取消硕导资格!科技部最新通报一批科研不端案件...
  16. 高效办公之超好用的流程图工具
  17. 《支付系统-支付核心》
  18. YesPlayMusic:支持vip播放的高颜值网易第三方播放器
  19. 2020未来杯总决赛暨颁奖典礼圆满落幕
  20. pymssql中文乱码踩坑

热门文章

  1. 天猫二面:内存耗尽后Redis会发生什么?
  2. BURNINTEST FOR LINUX CLI
  3. SimpleDateFormat使用详解及与毫秒的相互转换
  4. 快排(动图详细版,快速理解)
  5. 计算机控制系统讲的什么,计算机控制系统第11讲.ppt
  6. 股票 | 基金 | 大盘 | 历史行情数据批量在线下载Excel,随用随下
  7. 计算机信息技术基础pdf,《计算机信息技术基础(核心教程)》.pdf
  8. 高维数据映射为低维数据
  9. 日语二级听力循序渐进
  10. Addon domain SubDomain Parked Domains