MMA8451Q传感器读值
最近接触到一款加速度传感器(MMA8451Q),自己在此之前也接触过其他的(MPU605,7455)等,其实关于其的读值问题,还是难为了我一阵子,因为上次接触到最近,间隔的时间太久了,而且这之间还有很多其他的事情,所以就在此和大家分享一下我的一下心得
首先,自己现在官网上下载一系列的资料
地址为:https://www.nxp.com/products/sensors/motion-sensors/accelerometers-for-iot/2g-4g-8g-low-g-14-bit-digital-accelerometer:MMA8451Q?fpsp=1&tab=Documentation_Tab
步骤1:编写IIC时序
步骤2:MMA8451Q初始化
步骤3:读取X,Y,Z相应的寄存器
步骤4:对读出的值进行处理
步骤5:串口打印
步骤1:编写IIC时序
IIC读写MMA8451Q设备时序图
上述要写的程序分别为:
void IIC_start(void); //开始信号
void IIC_stop(void); //停止
void IIC_Ack(void); //应答
unsigned char IIC_read_byte(void); //读一个字节
void IIC_write_byte(unsigned char date); //写一个字节
unsigned char IIC_Wait_Ack(void); //等待应答
void IIC_NAck(void); //不应答
下面的就是写传感器的读写函数:
- 1 、 读(单字节读)
//函数名: MMA8451_single_Read
//函数功能: 从传感器设备读一个字节
//参数: REG_Address -- 寄存器地址
//返回值: 读回的数据
unsigned char MMA8451_single_Read(unsigned char REG_Address)
{ unsigned char dat;IIC_start(); IIC_write_byte(eSlaveAddress); //设备地址 IIC_Wait_Ack(); IIC_write_byte(REG_Address); //寄存器地址IIC_Wait_Ack();IIC_start(); //SRIIC_write_byte(eSlaveAddress+1); //设备地址 + read 方向IIC_Wait_Ack();dat = IIC_read_byte(); IIC_NAck();IIC_stop();return dat;
}
2、 读多个字节
//函数名: MMA8451_Multiple_Read
//函数功能: 从传感器设备读多个字节
//参数: REG_Address -- 寄存器地址
// num -- 要读的字节数
// *data_buf -- 存放读回数据的缓冲区
//返回值: 无
void MMA8451_Multiple_Read(unsigned char REG_Address, unsigned char num, unsigned char *data_buf)
{ unsigned char i;num += 1;IIC_start(); IIC_write_byte(eSlaveAddress); //设备地址 IIC_Wait_Ack(); IIC_write_byte(REG_Address); //寄存器地址IIC_Wait_Ack();IIC_start(); //SRIIC_write_byte(eSlaveAddress+1); //设备地址 + read 方向IIC_Wait_Ack();for(i=0;i<num-1;i++){*(data_buf+i) = IIC_read_byte(); if(i == num-1)IIC_NAck();elseIIC_Ack();}IIC_stop();
}
3、 写一个字节
//函数名: MMA8451_single_Write
//函数功能: 向传感器设备写一个字节的数据
//参数: REG_Address -- 寄存器地址 REG_data -- 要写的数据
//返回值: 无
void MMA8451_single_Write(unsigned char REG_Address,unsigned char REG_data)
{ IIC_start(); IIC_write_byte(eSlaveAddress); //设备地址 + write 方向IIC_Wait_Ack(); //等待应答IIC_write_byte(REG_Address); //寄存器地址IIC_Wait_Ack(); IIC_write_byte(REG_data); //数据IIC_Wait_Ack();IIC_stop();}
步骤2:MMA8451Q初始化
MMA8451_single_Write(CTRL_REG1,0x01); //唤醒传感器
步骤3:读取X,Y,Z三轴的加速度值
即读下面六个寄存器的值在读之前,需要判断一下数据是否已准备好
Bit 3 = 1:XYZ新数据已准备好
Bit 3 = 0:XYZ新数据未准备好
默认为0.
MMA8451_Multiple_Read(OUT_X_MSB,6,uc_mmA8451q_buf);
步骤4:对读出的值进行处理
根据需要修改
RegisterFlag_ZYXDR = (MMA8451_single_Read(STATUS_F_STATUS) & 0x08); //查询数据是否okif(RegisterFlag_ZYXDR == 0x08){MMA8451_Multiple_Read(OUT_X_MSB,6,uc_mmA8451q_buf);}X=uc_mmA8451q_buf[0];X=(X<<8) | uc_mmA8451q_buf[1];Y=uc_mmA8451q_buf[2];Y=(Y<<8) | uc_mmA8451q_buf[3];Z=uc_mmA8451q_buf[4];Z=( Z<<8) | uc_mmA8451q_buf[5];//*************************************************************************
//*****************************X轴
//*************************************************************************if(uc_mmA8451q_buf[0] > 0x7f){BUF[0]='-';X= ~X + 1;}else{BUF[0]='+';}a=(unsigned char)((X>>2) / 1000);r=(X>>2) % 1000;b=(unsigned char)(r / 100);r %= 100;c=(unsigned char)(r / 10);d=(unsigned char)(r % 10);//a b c dnum=(int)((a*1000) + (b*100) + (c*10) + (d*1));//num = num + Offset_X; //数据初始校准if(num<0){num = (-1)*num; }uc_read_x = num; //X轴的值
步骤5:通过串口发送 uc_read_x , uc_read_y , uc_read_z
MMA8451Q传感器读值相关推荐
- android传感器学习之获取传感器的值
在上一篇中,讲到了怎么获取手机的传感器http://blog.csdn.net/nainai007/article/details/7615364,在这里是获取传感器的值. 要获取传感器的值,首先要为 ...
- 获取加速传感器的值 APK
文章目录 1.加速传感器方向 2.功能显示 3.xml文件 4.功能代码 1.加速传感器方向 手机加速传感器检测: 可以想想中间位置有一个空气球, 1.手机上部抬起时,气球上移,Y变大. 2.手机右部 ...
- 使用Arduino读取噪声传感器分贝值
之前一直试图用树莓派读取噪声传感器的数据,然而我用的传感器只有模拟输出和电平输出,也就是说要是想检测噪声具体分贝值就只能使用AD转换模块,但是由于对AD转换模块的认识不深,所以遇到了一些困难,虽然那个 ...
- Vue.js 极简小例:读值、样式调用、if判断、a 标签、点击事件、管道
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 写法: <template><div id="app"& ...
- 研华板卡1742U--瞬时读值 用 instantAiCtrl1 控件
private void btnInit_Click(object sender, EventArgs e) { DeviceInformation myDevice = new DeviceInfo ...
- 土壤水势传感器测量值与土壤情况参考介绍
1.测量值在-10-0kPa范围内:表示潮湿,对多数作物湿度过高. 2.测量值在-30--10kPa范围内:表示湿润,适宜多数作物生长. 3.测量值在-50--30kPa范围内:表示干爽,喜湿作物已需 ...
- 从数据库里读值往TEXT文本里写
/// <summary> /// 把预定内容导入到Text文档 /// </summary> private void ChangeDbToText() { ...
- 从Text文本中读值插入到数据库中
/// <summary> /// 转换数据,从Text文本中导入到数据库中 /// </summary> private void ChangeTextToDb( ...
- C语言malloc()的使用解释和报错以及读值错误分析
最近,本大王利用C语言做数据结构时,遇到了许多与malloc相关的问题,特写此一篇来加深记忆并提醒广大初级coder. 前言:为什么使用malloc? 使用malloc()的作用: C语言的数据结构实 ...
最新文章
- 如何避免Java中的回调“地狱”
- python写一个表白程序-用Python写一个表白神器让你脱单
- 为利用 QT 制作的项目设置图标
- 北斗云计算机怎么样,北斗定位2.0版服务平台来了
- OSPF——多区域概念及配置、ABR简介、ASBR简介、路由重分发
- 字节跳动最爱考的前端面试题:计算机网络基础
- 【Flink】kafka INVALID_PRODUCER_EPO send data to Kafka old epoch newer producer same transactionalId
- Struts2框架学习笔记1
- 一份值得收藏的ACL 2020参会笔记:重要论文与NLP领域的发展趋势解读
- MikroTik RouterOS安装chr授权到阿里云虚拟机(转)
- 前端截取视频第一帧作为封面
- Mockito + JUnit 单元测试实例
- Java弹球游戏,刚学Java时做的
- 联想笔记本连不上手机热点_联想笔记本连不上无线_联想笔记本连不上热点
- Scrapy实例__链家租房爬虫
- python 批量更改扩展名
- 拉线传感器的数显仪表在测量中起到多大的作用
- 使用matplotlib绘制xkcd动漫风格的图表(解决中文字体问题)
- matlab井函数,用MATLAB函数解承压含水层完整井非稳定流问题
- OneTab插件的替代产品-OneTab Pro
热门文章
- 银行数字化的两难:安全还是效率?
- 一个有用的Win32消息处理宏HANDLE_MSG
- python-求无理数e的近似值
- 书到用时方恨少? 整理了一份初中、高中数学教材pdf 百度云
- CSS子元素撑满父元素(height: 100%无效)
- Vue 使用three.js实现简单全景图
- Android使用SharedPreferences存储数据
- ae制作小球轨迹运动_AE教程AE特效:教你如何用AE创建一个弹跳运动的小球特效...
- 彻底搞懂Python一切皆对象!!!
- Java客户关系管理CRM源码带小程序