智能小车的main函数相关部分如下:
#include "stm32f10x.h"
#include "motor.h"
#include "interface.h"
//全局变量定义
uint16_t speed_count=0;//占空比计时器,50次一周期
int8_t left_speed_duty=MIN_SPEED_DUTY;
int8_t right_speed_duty=MIN_SPEED_DUTY;
uint8_t tick_1s = 0;//1s计数器
uint8_t tick_100ms = 0;//100ms计数器
uint8_t tick_1ms = 0;//1ms计数器
//uint8_t continue_time=0;
void GPIO_Conf(void);
void RCC_Conf(void);
void TIM2_Init(void);
void MotorInit(void);
int main(void)
{
// uint16_t i,j;
RCC_Conf();
GPIO_Conf();
TIM2_Init();
MotorInit();
// for(i=0;i<10000;i++)
// for(j=0;j<1000;j++);
while(1)
{
if(tick_1s < 30)
{
CarGo(); //全速3s
//CarBack(); // 全速2s
//CarRight(); // 半速右转1s
}
else
CarStop(); // 停止
}
}
其中motor.c函数中相关需要修改部分如下:
//Ïòǰ
void CarGo(void)
{
left_speed_duty=MAX_SPEED_DUTY;
right_speed_duty=MAX_SPEED_DUTY;
}
//向前
void CarLeft(void)
{
left_speed_duty=-MID_SPEED_DUTY;
right_speed_duty=MID_SPEED_DUTY;
}
//向左
void CarRight(void)
{
left_speed_duty=MID_SPEED_DUTY;
right_speed_duty=-MID_SPEED_DUTY;
}
//向右
void CarStop(void)
{
left_speed_duty=MIN_SPEED_DUTY;
right_speed_duty=MIN_SPEED_DUTY;
}
//后退
void CarBack(void)
{
left_speed_duty=-MAX_SPEED_DUTY;
right_speed_duty=-MAX_SPEED_DUTY;
}
void MotorInit(void)
{
MotorGPIO_Configuration();
CarStop();
}
现在要求向前,向后分别全速跑四秒,然后向右转两秒,最后停止四秒,请问应该怎么改上面代码呢?
有同学给改成这样,我不是很理解,i应该在哪里申明呢,不需要赋初始值吗?
//向前
void CarGo(int i)
{
left_speed_duty=4*i;
right_speed_duty=4*i;
}
//向左
void CarRight(void)
{
left_speed_duty=MID_SPEED_DUTY;
right_speed_duty=-MID_SPEED_DUTY;
}
//向右
void CarStop(void)
{
left_speed_duty=MIN_SPEED_DUTY;
right_speed_duty=MIN_SPEED_DUTY;
}
//后退
void CarBack(int i)
{
left_speed_duty=-4*i;
right_speed_duty=-4*i;
}
void MotorInit(void)
{
MotorGPIO_Configuration();
CarStop();
}
参考GPT和自己的思路:
根据你的要求,可以将原来的while循环改为以下代码:
while(1)
{
if(tick_1s < 4)
CarGo(); //向前全速跑4s
else if(tick_1s < 8)
CarBack(); //向后全速跑4s
else if(tick_1s < 10)
CarRight(); //向右转2s
else if(tick_1s < 14)
CarStop(); //停止4s
if(tick_1s >= 14)
tick_1s = 0; //计时器归零
}
这里修改了while循环中的判断条件,根据计时器的不同阶段调用不同的Car函数来控制小车的运动。最后需要将计时器tick_1s在达到14后归零,以开始新的循环。同时,注意更改tick_1s的初始值。
至于第二部分代码的修改,可以将CarBack函数的参数i改为固定值4,以符合题目要求中的全速后退。至于申明i的位置和初始值可以放在调用CarBack函数的地方,这里不需要在函数外进行申明和赋值。