主函数
#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();
}