STM32F103C8驱动MPU6050姿态与tofsense报警 (六)

2024-01-17 06:28

本文主要是介绍STM32F103C8驱动MPU6050姿态与tofsense报警 (六),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

主函数



int main(void) 
{    
    //RCC_Configuration(); //时钟设置
    
    //BUZZER_BEEP1();//蜂鸣器音1
        //BUZZER_BEEP1();//蜂鸣器音1
    //delay_ms(50);
    SYS_Init();//系统初始化总函数
    while(1)   //主循环
    {
     // BUZZER_BEEP1();//蜂鸣器音1
        MPU_Read();    //MPU6050数据读取
        DATA_Report(); //MPU6050数据上报
    }
}
/**
  * @brief  系统初始化总函数
  * @param  无
  * @retval 无
  */
void SYS_Init(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组函数
    delay_init();                                     //延时函数初始化      
    uart_init(115200);                                  //串口初始化为115200
    LED_Init();                                            //初始化与LED连接的硬件接口
    BUZZER_Init();//蜂鸣器初始化
    
    MPU_Init();                                         //初始化MPU6050
    while(mpu_dmp_init())                            //初始化mpu_dmp库
     {
        LED1 = !LED1;delay_ms(50);LED1 = !LED1;     //LED闪烁指示
        printf("Initialization failed!\r\n");        //串口初始化失败上报
    }
    printf("Initialization succeed!\r\n");            //串口初始化成功上报
    delay_ms(999);                                    //延时初界面显示
    mpu6050.flag = 0;                               //采集成功标志位初始化
    mpu6050.speed = 0;                                //上报速度初始化
}
/**
  * @brief  MPU6050数据读取函数
  * @param  无
  * @retval 无
  */
void MPU_Read(void)
{
    
    if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)//dmp处理得到数据,对返回值进行判断
    { 
        temp=MPU_Get_Temperature();                    //得到温度值
        MPU_Get_Accelerometer(&aacx,&aacy,&aacz);    //得到加速度传感器数据
        MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);    //得到陀螺仪数据
        mpu6050.speed++;                            //上报速度自加
        if(mpu6050.speed == 4)                        //上报速度阈值设置
        {
            mpu6050.flag = 1;                        //采集成功标志位设置为有效
            mpu6050.speed = 0;                        //上报速度归零
        }    
    }
    else                                             //采集不成功                                        
    {
        mpu6050.flag = 0;                            //采集成功标志位设置为无效
    }    
}
/**
  * @brief  MPU6050数据上报
  * @param  无
  * @retval 无
  */
void DATA_Report(void)
{
    if(mpu6050.flag == 1)                        //采集成功时
    { 
        if(temp<0)                                //对数据正负判断,判断为负时
        {
            temp=-temp;                            //对负数据取反
        }
        else                                    //判断为正时
        {
        }
//        printf("temp:%d.%d,",temp/100,temp%10); //通过串口1输出温度
        
        temp=pitch*10;                             //赋temp为pitch
        if(temp<0)                                //对数据正负判断,判断为负时
        {
            temp=-temp;                            //对负数据取反        
        }
        else                                    //判断为正时 
        {
        }
            
        //printf("pitch:%d.%d,",temp/10,temp%10); //通过串口1输出pitch    
        printf("%d.%d,",temp/10,temp%10); //通过串口1输出pitch
        if (temp/10 >= 10 && temp/10 <= 30) 
        {  
            BUZZER_BEEP1();//蜂鸣器音1
        }
        temp=roll*10;                            //赋temp为roll
        if(temp<0)                                //对数据正负判断,判断为负时
        {
            temp=-temp;                            //对负数据取反    
        }
        else                                    //判断为正时
        {
        }
        if (temp/10 >= 5 && temp/10 <= 30) 
        {  
            BUZZER_BEEP1();//蜂鸣器音1
        }
        //printf("roll:%d.%d,",temp/10,temp%10);//通过串口1输出roll
        printf("%d.%d,",temp/10,temp%10);//通过串口1输出yaw    
        temp=yaw*10;                           //赋temp为yaw
        if(temp<0)                                //对数据正负判断,判断为负时
        {
            temp=-temp;                            //对负数据取反
        }
        else                                    //判断为正时
        {
        }
        //printf("yaw:%d.%d,",temp/10,temp%10);//通过串口1输出yaw    
        printf("%d.%d",temp/10,temp%10);//通过串口1输出roll
//        printf("gyrox:%d,gyroy:%d,gyroz:%d,aacx:%d,aacy:%d,aacz:%d\r\n",gyrox,gyroy,gyroz,aacx,aacy,aacz);//上报角速度数据,角加速度数据
            printf("\r\n");        
        LED1=!LED1;                                             //LED闪烁
        mpu6050.flag = 0;                                    //采集成功标志位设置为无效
    }
    else ;                                                        //防卡死
}

main.h

#include "stdio.h"//标准输入输出库
#include "string.h"//字符串库
#include "stdlib.h"//常用的系统函数库
#include "sys.h"//系统中断分组库
#include "delay.h"//延时函数库
#include "usart.h"//串口设置库
#include "led.h"//LED驱动库
#include "mpu6050.h"//MPU6050驱动库
#include "inv_mpu.h"//陀螺仪驱动库
#include "inv_mpu_dmp_motion_driver.h" //DMP姿态解读库
#include "buzzer.h"

char tmp_buf[33];            //字符串数组
float pitch,roll,yaw;         //欧拉角:俯仰角,偏航角,滚转角
short aacx,aacy,aacz;        //加速度传感器原始数据  angular acceleration
short gyrox,gyroy,gyroz;    //陀螺仪原始数据  gyroscope
short temp;                    //温度


struct MPU6050                //MPU6050结构体
{
    u8 flag;                //采集成功标志位
    u8 speed;                //上报速度
}mpu6050;                    //唯一结构体变量


int main(void);                //主函数
void SYS_Init(void);        //系统初始化总函数
void MPU_Read(void);        //MPU6050数据读取函数    
void DATA_Report(void);        //MPU6050数据上报    

这篇关于STM32F103C8驱动MPU6050姿态与tofsense报警 (六)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/615117

相关文章

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

驱动(RK3588S)第七课时:单节点设备树

目录 需求一、设备树的概念1、设备树的后缀名:2、设备树的语法格式3、设备树的属性(重要)4、设备树格式举例 二、设备树所用函数1、如何在内核层种获取设备树节点:2、从设备树上获取 gpio 口的属性3、获取节点上的属性只针对于字符串属性的4、函数读取 np 结点中的 propname 属性的值,并将读取到的 u32 类型的值保存在 out_value 指向的内存中,函数的返回值表示读取到的

驱动安装注册表指令

HKCR: HKEY_CLASSES_ROOT HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE HKU: HEKY_USER HER: 相对根键

UMDF驱动安装

VS2013 + WDF8.1,UMDF驱动选择User Mode Driver,不要选User Mode Driver 2.0,否则Win7安装有问题,如图 另外,在驱动安装时不要忘记WUDFUpdate_<主版本号><次版本号>.dll文件,具体文件名在INF中查找。此文件可在WDF的安装目录中找到。注意:在WDF的安装目录中会有3个WUDFUpdate_xxx.dll文件,x86,x6

数据集 3DPW-开源户外三维人体建模-姿态估计-人体关键点-人体mesh建模 >> DataBall

3DPW 3DPW-开源户外三维人体建模数据集-姿态估计-人体关键点-人体mesh建模 开源户外三维人体数据集 @inproceedings{vonMarcard2018, title = {Recovering Accurate 3D Human Pose in The Wild Using IMUs and a Moving Camera}, author = {von Marc

电脑驱动分类

电脑驱动程序(驱动程序)是操作系统与硬件设备之间的桥梁,用于使操作系统能够识别并与硬件设备进行通信。以下是常见的驱动分类: 1. 设备驱动程序 显示驱动程序:控制显卡和显示器的显示功能,负责图形渲染和屏幕显示。 示例:NVIDIA、AMD 显示驱动程序。打印机驱动程序:允许操作系统与打印机通信,控制打印任务。 示例:HP、Canon 打印机驱动程序。声卡驱动程序:管理音频输入和输出,与声卡硬件

数据集 Ubody人体smplx三维建模mesh-姿态估计 >> DataBall

Ubody开源人体三维源数据集-smplx-三维建模-姿态估计 UBody:一个连接全身网格恢复和真实生活场景的上半身数据集,旨在拟合全身网格恢复任务与现实场景之间的差距。 UBody包含来自多人的现实场景的1051k张高质量图像,这些图像拥有2D全身关键点、3D SMPLX模型。 UBody由国际数字经济学院(IDEA)提供。 (UBody was used for mesh r

麒麟系统安装GPU驱动

1.nvidia 1.1显卡驱动 本机显卡型号:nvidia rtx 3090 1.1.1下载驱动 打开 https://www.nvidia.cn/geforce/drivers/ 也可以直接使用下面这个地址下载 https://www.nvidia.com/download/driverResults.aspx/205464/en-us/ 1.1.3安装驱动 右击,

【语音告警】博灵智能语音报警灯JavaScript循环播报场景实例-语音报警灯|声光报警器|网络信号灯

功能说明 本文将以JavaScript代码为实例,讲解如何通过JavaScript代码调用博灵语音通知终端 A4实现声光语音告警。主要博灵语音通知终端如何实现无线循环播报或者周期播报的功能。 本代码实现HTTP接口的声光语音播报,并指定循环次数、播报内容。由于通知终端采用TTS语音合成技术,所以本次案例中无需预先录制音频。 代码实战 为了通过JavaScript调用博灵语音通知终端,实现HT

windows10 卸载网络驱动以及重新安装

右键桌面此电脑的图标,点击管理,设备管理器—网络适配器,找到下图中的驱动(不同的系统或者显卡会导致网卡驱动名称与下图不一样,多为Realtek开头),右键选择卸载设备,然后重启电脑,系统会自动重新安装驱动 新电脑首次安装驱动: 根据主板厂家,比如华硕,进入华硕官网,点击服务支持,点击下载中心,选择型号,点击右侧驱动程序和工具软件,选择windows版本,下载相应的驱动,下载完之后在对应文件中找