找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 868|回复: 0
收起左侧

基于STM32单片机的电子计步器程序

[复制链接]
ID:1140753 发表于 2024-12-21 19:51 | 显示全部楼层 |阅读模式
基于stm32的电子计步器,使用MPU6050角速度传感器检测角速度和温度,使用的官方库检测位置信息。分享出来供同学们使用,传感器数据采集板和主控板的完整源码pcb文件都有提供,可以直接使用嘉立创商城制版。欢迎大家下载.

仿真.png 嘉立创版图.png

  1. #include "stm32f10x.h"                  // Device header
  2. #include "Delay.h"
  3. #include "OLED.h"
  4. #include "MPU6050.h"
  5. #include "inv_mpu.h"
  6. #include "inv_mpu_dmp_motion_driver.h"
  7. #include "TIM.h"
  8. #include "MyRTC.h"



  9. //float Pitch,Roll,Yaw;                                                                //俯仰角默认跟中值一样,翻滚角,偏航角
  10. //int16_t ax,ay,az,gx,gy,gz;                                                        //加速度,陀螺仪角速度

  11. //u8 MPU_Get_Gyroscope(short *gx,short *gy,short *gz);
  12. //u8 MPU_Get_Accelerometer(short *ax,short *ay,short *az);
  13. //int temp;

  14. //short MPU_Get_Temperature(void);
  15. u8 mpu6050InitFlag = 1;
  16. int temp;
  17. unsigned long int count = 0;
  18. unsigned long int lastcount = 0;
  19. int step;

  20. int main(void)
  21. {
  22.         OLED_Init();       
  23.         OLED_ShowString(2, 2, "Starting....");
  24.         MyRTC_Init();                //RTC初始化
  25.         MPU6050_Init();
  26.         MPU6050_DMP_Init();

  27. //        OLED_ShowString(6, 1, "Mode1");
  28.        
  29.                                 while(mpu6050InitFlag)
  30.         {
  31.                 mpu6050InitFlag = MPU6050_DMP_Init();
  32.         }
  33.        
  34.        
  35.          OLED_ShowString(2, 1, "Time:");
  36.          OLED_ShowString(2, 8, ":");
  37.          OLED_ShowString(2, 11, ":");
  38.          OLED_ShowString(3, 8, ".");         
  39.          OLED_ShowString(2, 8, ":");
  40.          OLED_ShowString(2, 11, ":");
  41.          OLED_ShowString(3, 1, "Temp:");
  42.          OLED_ShowString(4, 1, "Step:");
  43.          OLED_ShowString(3, 8, ".");         

  44.          
  45.          
  46.        
  47.        
  48.        
  49.        
  50. //        TIM3_Int_Iint(9999 , 7199);//定时器3的1秒中断初始化

  51.         while (1)
  52.         {
  53. //                MPU6050_DMP_Get_Data(&Pitch,&Roll,&Yaw);                                //读取姿态信息(其中偏航角有飘移是正常现象)
  54. //                MPU_Get_Gyroscope(&gx,&gy,&gz);
  55. //                MPU_Get_Accelerometer(&ax,&ay,&az);
  56. //                        temp = MPU_Get_Temperature();
  57. //                        OLED_ShowNum(3, 1, temp, 3);
  58. //                OLED_ShowSignedNum(2, 1, Pitch, 5);
  59. //                OLED_ShowSignedNum(3, 1, Roll, 5);
  60. //                OLED_ShowSignedNum(4, 1, Yaw, 5);
  61. //                OLED_ShowSignedNum(2, 8, gx, 5);
  62. //                OLED_ShowSignedNum(3, 8, gy, 5);
  63. //                OLED_ShowSignedNum(4, 8, gz, 5);
  64.                
  65.                
  66.                
  67.           MyRTC_ReadTime();
  68.                
  69.                
  70.                 temp = MPU_Get_Temperature()/10;
  71.                 OLED_ShowNum(3, 6, temp, 2);
  72.                 temp = MPU_Get_Temperature()%10;
  73.                  OLED_ShowNum(3, 9, temp, 1);
  74.                
  75.                
  76. //                temp = MPU_Get_Temperature()%100;
  77. //                 OLED_ShowNum(3, 9, temp, 1);

  78.          
  79.                 OLED_ShowNum(2, 6, MyRTC_Time[3], 2);                //时
  80.                 OLED_ShowNum(2, 9, MyRTC_Time[4], 2);                //分
  81.                 OLED_ShowNum(2, 12, MyRTC_Time[5], 2);                //秒
  82.                 //OLED_ShowNum(4, 1, RTC_GetCounter(), 10);        //显示32位的秒计数器
  83.                 OLED_ShowNum(5, 1, RTC_GetDivider(), 10);        //显示余数寄存器
  84.                
  85.                
  86.                
  87.                 lastcount = count;
  88.                 dmp_get_pedometer_step_count(&count);
  89.                 step = count/3;
  90.                 OLED_ShowNum(4, 6, step, 3);
  91. //                 if(lastcount!=count)
  92. //                        OLED_ShowSignedNum(4, 10, (int)count, 3);


  93.         }
  94. }
复制代码

计步器源代码v5.0.7z

237.07 KB, 下载次数: 0, 下载积分: 黑币 -5

计步器.rar

175.11 KB, 下载次数: 0, 下载积分: 黑币 -5

上传嘉立创商城可以免费制作

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表