[六足机器人]基于ucosii的F407VGT6

主函数

#include "gui.h"
#include "stm32f4xx.h"
#include "delay.h"
#include "led.h"
#include "usart.h"
#include "ucos_ii.h"
#include "pwm.h"
#include "control.h"
#include "app_cfg.h"
#include "bsp.h"
#include "24l01.h"
#include "spi.h"

//Task Stack Setting
#define  APP_TASK_START_STK_SIZE           512
#define  APP_LED1_STK_SIZE			   	   1024
#define  APP_NRF24L01_STK_SIZE			   1024
#define  APP_LED3_STK_SIZE			       1024

//Task Priority
#define  APP_TASK_START_PRIO               3
#define  APP_LED1_PRIO                     5
#define  APP_NRF24L01_PRIO                 4
#define  APP_LED3_PRIO                     7

//Stack Size setting 
static  OS_STK App_TaskStartStk[APP_TASK_START_STK_SIZE];
static  OS_STK App_LED1Stk[APP_LED1_STK_SIZE];
static  OS_STK App_NRF24L01Stk[APP_NRF24L01_STK_SIZE];
static  OS_STK App_LED3Stk[APP_LED3_STK_SIZE];

//Function Statement
static  void  App_TaskStart(void *p_arg);
static  void  App_Task_LED1(void *p_arg);
static  void  App_Task_NRF24L01(void *p_arg);
static  void  App_Task_ACTION(void *p_arg);

u8 tmp_buf[33];//data received buffer
u8 cmd_last = 0xff;
static u8 cmd = 0;     //command of action

int main(void)
{  
    OSInit();      			   //uC/OS-II init
	TIM_Init();
	NRF24L01_Init();    
//	Stand_Up();
	LED_Init();         		//LED Init
	while(NRF24L01_Check())
	{
    	LED1(On);
		OSTimeDlyHMSM(0,0,0,50);
		LED1(Off);
		OSTimeDlyHMSM(0,0,0,50);
	}
	RX_Mode();						
    OSTaskCreate(App_TaskStart,(void*)0,(OS_STK*)&App_TaskStartStk[APP_TASK_START_STK_SIZE-1],APP_TASK_START_PRIO);    
    OSStart();                                                     
    return (0);
}
static  void  App_TaskStart (void *p_arg)//construct new task in this function
{	 
    OS_CPU_SysTickInit();         //Init System Clock
    BSP_Init(); 
    OSTaskCreate(App_Task_LED1,(void*)0,(OS_STK*)&App_LED1Stk[APP_LED1_STK_SIZE-1],APP_LED1_PRIO);    
    OSTaskCreate(App_Task_NRF24L01,(void*)0,(OS_STK*)&App_NRF24L01Stk[APP_NRF24L01_STK_SIZE-1],APP_NRF24L01_PRIO);    
    OSTaskCreate(App_Task_ACTION,(void*)0,(OS_STK*)&App_LED3Stk[APP_LED3_STK_SIZE-1],APP_LED3_PRIO);    
 	  OSTaskSuspend(APP_TASK_START_PRIO);	//suspend but not delete
}

static  void  App_Task_LED1 (void *p_arg)//construct new task in this function
{	 
    while (1) 
	{ 	
    	LED1(On);
		LED0(Off);
		OSTimeDlyHMSM(0,0,0,50);
		LED1(Off);
    	LED0(On);
		OSTimeDlyHMSM(0,0,0,50);
    }
}
static  void  App_Task_NRF24L01 (void *p_arg)//construct new task in this function
{	 
    while (1) 
	{ 	
		if(NRF24L01_RxPacket(tmp_buf)==0)
		{
	    	LED2(On);
			OSTimeDlyHMSM(0,0,0,30);
			LED2(Off);
			OSTimeDlyHMSM(0,0,0,30);
		}else 			
			OSTimeDlyHMSM(0,0,0,1);	
		if((tmp_buf[0] == tmp_buf[1])&&(tmp_buf[0] == tmp_buf[2]))
		{
			cmd = tmp_buf[0];
		}
    }
}
static  void  App_Task_ACTION (void *p_arg)//construct new task in this function
{	
    while (1) 
	{ 	
		if(cmd != cmd_last)
		{
			cmd_last = cmd;
			switch ( cmd )
			{
				case '1':Stand_Up(ACTION_DELAY);break;
				case '2':Stamp('2',&cmd);break;
				case '3':Sit_Down(ACTION_DELAY);break;
				case '4':Go_straight('4',&cmd);break;
				case '5':LED3(On);	break;	
				case '6':Turn('6',&cmd);  break;
				default :break;
			}
		}
    }
}

各个动作

void Stand_Up(int delay_time)
{
		int pwm_tmp = 0;
		int pwm_tmp2 = 0;
		Open_All_TIM();			//Open all timer
		TIM_SetCompare4(TIM1,pwm_init[2]);	 //2-3-2
		TIM_SetCompare4(TIM2,pwm_init[18]);	 //4-3-18
		TIM_SetCompare1(TIM4,pwm_init[23]);	 //6-3-23  	   
		TIM_SetCompare4(TIM4,pwm_init[19]);	 //1-3-19
		TIM_SetCompare2(TIM5,pwm_init[16]);	 //3-3-16  	   
		TIM_SetCompare3(TIM5,pwm_init[22]);	 //5-3-22  	   
		for (;pwm_tmp<=STAND_HIGHT;)				 //150 efect the height of stand
		{
//			delay_ms(ACTION_DELAY);	
			OSTimeDlyHMSM(0,0,0,delay_time);//ÑÓʱ£¬²ÎÊý£ºÊ±£¬·Ö£¬Ã룬΢Ãë
			TIM_SetCompare3(TIM2,pwm_init[15] - STAND_HIGHT + pwm_tmp);	 //3-2-15	   
			TIM_SetCompare3(TIM4,pwm_init[20] - STAND_HIGHT + pwm_tmp);	 //1-2-20
			TIM_SetCompare1(TIM5,pwm_init[6]  - STAND_HIGHT + pwm_tmp);	 //2-2-6	   	   
	   	   

			TIM_SetCompare4(TIM3,pwm_init[7]  + STAND_HIGHT - pwm_tmp);	 //4-2-7	
			TIM_SetCompare2(TIM4,pwm_init[24] + STAND_HIGHT - pwm_tmp);  //6-2-24 
			TIM_SetCompare4(TIM5,pwm_init[21] + STAND_HIGHT - pwm_tmp);	 //5-2-21
			
			TIM_SetCompare1(TIM1,pwm_init[1] - SHRINK_DEGREE + pwm_tmp2);	 //1-1-1  	   
			TIM_SetCompare2(TIM1,pwm_init[5] - SHRINK_DEGREE + pwm_tmp2);	 //2-1-5  	   
			TIM_SetCompare3(TIM1,pwm_init[9] - SHRINK_DEGREE + pwm_tmp2);	 //3-1-9  
			
			TIM_SetCompare1(TIM3,pwm_init[12] + SHRINK_DEGREE - pwm_tmp2);	 //4-1-12  	   
			TIM_SetCompare2(TIM3,pwm_init[8]  + SHRINK_DEGREE - pwm_tmp2);	 //5-1-8  	   
			TIM_SetCompare3(TIM3,pwm_init[4]  + SHRINK_DEGREE - pwm_tmp2);	 //6-1-4  	   
			
			pwm_tmp += ACTION_SPEED;	
			pwm_tmp2 += SHRINK_SPEED;	
		}
}
void Stamp(u8 Com_Num,u8 * Input_num)
{
	Pace_135_Motor2(0,150,STAMP_DELAY);		//UP
	while(Com_Num == *Input_num)
	{
	   	Pace_135_Motor2(150,-150,STAMP_DELAY);	//DOWM
		Pace_246_Motor2(0,150,STAMP_DELAY);	//UP
		Pace_246_Motor2(150,-150,STAMP_DELAY);	//DOWM
		Pace_135_Motor2(0,150,STAMP_DELAY);	//UP
	}
	Pace_135_Motor2(150,-150,STAMP_DELAY);	//DOWM
}
void Sit_Down(int delay_time)
{
		int pwm_tmp = 0;						//motor 2
		int pwm_tmp2 = 0;						//motor 1
		for (;pwm_tmp<=STAND_HIGHT;)				 //150 efect the height of stand
		{
//			delay_ms(ACTION_DELAY);
			OSTimeDlyHMSM(0,0,0,delay_time);//ÑÓʱ£¬²ÎÊý£ºÊ±£¬·Ö£¬Ã룬΢Ãë
			TIM_SetCompare3(TIM2,pwm_init[15] - pwm_tmp);	 //3-2-15	
			TIM_SetCompare3(TIM4,pwm_init[20] - pwm_tmp);	 //1-2-20
			TIM_SetCompare1(TIM5,pwm_init[6]  - pwm_tmp);	 //2-2-6	   	   

			TIM_SetCompare4(TIM3,pwm_init[7]  + pwm_tmp);	 //4-2-7	
			TIM_SetCompare2(TIM4,pwm_init[24] + pwm_tmp);	 //6-2-24 
			TIM_SetCompare4(TIM5,pwm_init[21] + pwm_tmp);	 //5-2-21
			
			TIM_SetCompare1(TIM1,pwm_init[1] - pwm_tmp2);	 //1-1-1  	   
			TIM_SetCompare2(TIM1,pwm_init[5] - pwm_tmp2);	 //2-1-5  	 
			TIM_SetCompare3(TIM1,pwm_init[9] - pwm_tmp2);	 //3-1-9  
			
			TIM_SetCompare1(TIM3,pwm_init[12] + pwm_tmp2);	 //4-1-12  	   
			TIM_SetCompare2(TIM3,pwm_init[8] + pwm_tmp2);	 //5-1-8  	   
			TIM_SetCompare3(TIM3,pwm_init[4] + pwm_tmp2);	 //6-1-4  	   
				   
			pwm_tmp += ACTION_SPEED;	
			pwm_tmp2 += SHRINK_SPEED;	
		}
		OSTimeDlyHMSM(0,0,0,100);//ÑÓʱ£¬²ÎÊý£ºÊ±£¬·Ö£¬Ã룬΢Ãë
		Close_All_TIM();		//close all timer
}
void Go_straight(u8 Com_Num,u8 * Input_num)
{
	Pace_135_Motor2(0,100,STRAIGHT_DELAY);		//UP
	while(Com_Num == *Input_num)
	{
		Pace_246_Motor3(0,80,STRAIGHT_DELAY);		//FRONT
	   	Pace_135_Motor2(100,-100,STRAIGHT_DELAY);	//DOWM
		Pace_246_Motor2(0,100,STRAIGHT_DELAY);		//UP
		Pace_246_Motor3(80,-80,STRAIGHT_DELAY);		//RETURN
		Pace_135_Motor3(0,80,STRAIGHT_DELAY);		//FRONT
		Pace_246_Motor2(100,-100,STRAIGHT_DELAY);	//DOWM
		Pace_135_Motor2(0,100,STRAIGHT_DELAY);		//UP
		Pace_135_Motor3(80,-80,STRAIGHT_DELAY);		//RETURN
	}
	Pace_135_Motor2(100,-100,STRAIGHT_DELAY);		//DOWM
}
void Turn(u8 Com_Num,u8 * Input_num)
{
	while(Com_Num == *Input_num)
	{
		Pace_135_246_Motor3(0,0,70,TURN_DELAY);     //turn body left

		Pace_246_Motor2(0,100,TURN_DELAY);			  //UP
		Pace_246_Motor3_Different(70,-70,TURN_DELAY);	  //2,4,6 leg return
		Pace_246_Motor2(100,-100,TURN_DELAY);		      //DOWM
		
		Pace_135_Motor2(0,100,TURN_DELAY);			  //UP
		Pace_135_Motor3_Different(70,-70,TURN_DELAY);	  //1,3,5 leg return
		Pace_135_Motor2(100,-100,TURN_DELAY);		      //DOWM
		
	}
}
驱动
void TIM_Init(void)
 {
  TIM1_Init();
TIM2_Init();
TIM3_Init();
TIM4_Init();
TIM5_Init();
 }




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值