上位机通过串口给单片机发送角度,使得它控制舵机转对应的角度
若角度发送不正确,返回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)
|