上位機通過串口給單片機發送角度,使得它控制舵機轉對應的角度
若角度發送不正確,返回error提示信息
此程序可以用來檢測舵機是否工作正常
單片機源程序如下:
- #include "stm32f10x.h"
- #include "pwm.h"
- #include "delay.h"
- #include "follower.h"
- unsigned char Dat_R[50];
- char error[] = "error";
- char i2 = 0;//Dat_R[]的數組下標
- u8 Transmit_flag_2=0;//串口2接受標志位
- int main(void)
- {
- u16 pwm_value = 0;//45~215對應0~180度
- u8 i = 0;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- my_FOLLOWER_Init(115200);
- my_PWM_Init(1800,799);//20ms
- delay_init();
- TIM_SetCompare1(TIM3, 135);//初始化舵機角度為90度
- while(1)
- {
- USART_GetFlagStatus(USART1,USART_FLAG_TC);
- USART_GetFlagStatus(USART2,USART_FLAG_TC);
-
- if(Transmit_flag_2)
- {
- i = 0;
-
- if(i2 <= 5)
- {
- while(Dat_R[i] != '\r')
- {
- pwm_value = pwm_value*10 + (Dat_R[i]-'0');
- i++;
- }
- if(pwm_value<=180)
- {
- TIM_SetCompare1(TIM3, pwm_value+45);
- USART_SendData(USART1, 'O');
- while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
- USART_SendData(USART1, 'K');
- while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
- }
- else
- {
- for(i = 0; i < 5; i++)
- {
- USART_SendData(USART1, error[i]);
- while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
- }
- }
- }
- else
- {
- for(i = 0; i < 5; i++)
- {
- USART_SendData(USART1, error[i]);
- while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
- }
- }
-
-
- for(i = 0; i < i2; i++)
- {
- Dat_R[i] = 0;
- }
- i = 0;
- pwm_value = 0;
- i2 = 0;
- Transmit_flag_2 = 0;
- }
-
- }
- }
復制代碼
所有資料51hei提供下載:
串口控制舵機.zip
(300.91 KB, 下載次數: 128)
2018-9-16 15:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|