KX022-1020(罗姆-加速度传感器)示例
概述
做个笔录,最近项目使用了此款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(罗姆-加速度传感器)示例相关推荐
- 传感器 Sensor 加速度【示例】
简介 坐标系 x轴:从左到右 y轴:从下到上 z轴:从内到外 这个坐标系与Android 2D API中的不同,传感器中的返回值都以此坐标系为准. SENSOR_TYPE_ACCELEROMETER ...
- android 获取加速度传感器值,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...
本文实例讲述了Android开发获取传感器数据的方法.分享给大家供大家参考,具体如下: package mobile.android.sensor; import java.util.List; im ...
- android开发中磁场传感器,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...
本文实例讲述了Android开发获取传感器数据的方法.分享给大家供大家参考,具体如下: package mobile.android.sensor; import java.util.List; im ...
- linux加速度传感器校准,加速度传感器校准方法及装置与流程
本申请涉及传感器校准领域,具体而言,涉及一种加速度传感器校准方法及装置. 背景技术: 在移动终端中,导航软件的使用频率越来越高,比如说百度地图.高德导航等.目前,移动终端通常包含加速度传感器,在导航过 ...
- 与众不同 windows phone (18) - Device(设备)之加速度传感器, 数字罗盘传感器
原文:与众不同 windows phone (18) - Device(设备)之加速度传感器, 数字罗盘传感器 [索引页] [源码下载] 与众不同 windows phone (18) - Devic ...
- 高通 android 传感器支持,Android加速度传感器数值的过滤
加速度传感器测量设备的加速度,包括重力加速度.以下代码展示了如何获取缺省的加速度传感器的一个实例: private SensorManager mSensorManager; private Sens ...
- Android指南针之加速度传感器地磁传感器-android学习之旅(67)
由于andorid不推荐用传统的方向传感器,推荐用加速度传感器和地磁传感器来构造得到方向传感器的数据,其实主要是z轴的旋转角度 具体代码示例 代码如下 public class MainActivit ...
- 树莓派基础实验31:MPU6050陀螺仪加速度传感器实验
一.介绍 MPU6050是世界上第一款也是唯一一款专为智能手机.平板电脑和可穿戴传感器的低功耗.低成本和高性能要求而设计的6轴运动跟踪设备. 它集成了3轴MEMS陀螺仪,3轴MEMS加速度 ...
- 基于MPU6050三轴陀螺仪和三轴加速度传感器姿态识别实验
虽然这里已经提供了获取陀螺仪与加速度相关数据的Arduino示例代码 ,但怎么用这些数据来展现当前的姿态却也还是个问题:后来看到关于ITG3205与ADXL345的姿态识别帖子,然后抄过来一试,效果还 ...
最新文章
- Python人脸识别+手机推送,老板来了你就会收到短信提示
- ssh 配置:在 Linux 中 ssh 配置无密码登陆完整步骤以及易错点分析
- 开放外链后,阿里旗下多个App已接入微信支付:更方便了
- 【SQL】IN、EXISTS和表连接三者的效率比较
- 非旋转Treap及可持久化[Merge,Split]
- jvm内存分析和cpu耗时分析
- 光立方体c语言程序,444光立方程序怎么写 光立方原理图、源代码及制作教程
- 软件测试思维总结(1)-----比较思维:利用好可参照的资源
- ArcGIS中shp文件的裁剪
- narwal机器人_Narwal云鲸智能扫拖机器人,会自己洗拖布
- Flutter代码可插拨/解耦方案
- matlab正序零序负序,正序负序零序的理解
- c++读取文本中文乱码
- 前端工程师面试问题归纳(一、问答类html/css/js基础)
- 撤销博士学位!取消硕导资格!科技部最新通报一批科研不端案件...
- 高效办公之超好用的流程图工具
- 《支付系统-支付核心》
- YesPlayMusic:支持vip播放的高颜值网易第三方播放器
- 2020未来杯总决赛暨颁奖典礼圆满落幕
- pymssql中文乱码踩坑
热门文章
- 天猫二面:内存耗尽后Redis会发生什么?
- BURNINTEST FOR LINUX CLI
- SimpleDateFormat使用详解及与毫秒的相互转换
- 快排(动图详细版,快速理解)
- 计算机控制系统讲的什么,计算机控制系统第11讲.ppt
- 股票 | 基金 | 大盘 | 历史行情数据批量在线下载Excel,随用随下
- 计算机信息技术基础pdf,《计算机信息技术基础(核心教程)》.pdf
- 高维数据映射为低维数据
- 日语二级听力循序渐进
- Addon domain SubDomain Parked Domains