找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 472|回复: 0
打印 上一主题 下一主题
收起左侧

stm32f103舵机云台(附带mpu6050解算)

[复制链接]
跳转到指定楼层
楼主
ID:1090084 发表于 2023-7-30 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Serial.h"
#include <stdio.h>
#include <stdlib.h>
#include "Key.h"
#include "sys.h"
#include "LED.h"
#include "Servo.h"
#include "mpu6050.h"  
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"

unsigned int KeyNum,Mode;
float Ang1,Ang2,AngFlag;
float Angle1=160,Angle2=70;
float Pitch,Roll,Yaw,Pitch_read,Roll_read,Yaw_read;
int16_t Gx,Gy,Gz;

float low_rc(float x,float alpha);

int main(void)
{
        OLED_Init();
        Key_Init();
        Serial_Init();
        Servo_Init();
        OLED_ShowString(1,1,"Roll:");
        OLED_ShowString(2,1,"Yaw:");
        OLED_ShowString(1,12,".");
        OLED_ShowString(2,12,".");
        OLED_ShowString(3,1,"1:");
        OLED_ShowString(4,1,"2:");
        Servo_SetAngle(160,70);

        MPU6050_DMP_Init();
        Delay_ms(2000);
       
        while (1)
        {
                KeyNum=Key_GetNum();
                if(KeyNum==1)Mode=0;
                if(KeyNum==2)Mode=1;
                OLED_ShowSignedNum(1,6,Roll,5);
                OLED_ShowSignedNum(2,6,Yaw,5);
                OLED_ShowNum(1,13,(int)(Roll*10)%10,1);
                OLED_ShowNum(2,13,(int)(Yaw*10)%10,1);
                OLED_ShowNum(3,3,Angle1,3);
                OLED_ShowNum(4,3,Angle2,3);
               
                if(MPU6050_DMP_Get_Data(&Pitch_read,&Roll_read,&Yaw_read)==0)
                {
                        Roll=Roll_read;if(Roll<-50)Roll=-50;if(Roll>50)Roll=50;
                        Yaw=Yaw_read;if(Yaw<-160)Yaw=-160;if(Yaw>20)Yaw=20;
                }
               
                if(Mode==1)
                {
                        Angle1=160+Yaw;
                        Angle2=70+Roll;
               
                        if(Angle1<0){Angle1=0;}
                        if(Angle1>180){Angle1=180;}
                        if(Angle2<0){Angle2=0;}
                        if(Angle2>180){Angle2=180;}
                }
               
                Servo_SetAngle(Angle1,Angle2);
        }
               
               
}
                       
float low_rc(float x,float alpha)
{
        static float y,last_y;
        y=alpha*x+(1-alpha)*last_y;
        last_y=y;
        return y;
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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