红外寻迹小车基于K128单片机的红外对管飞思卡尔智能车(5个对管)软件部分包括:
出库
直行模块
大,小弯道
环岛
s弯
停车
#include "headfile.h"
#include "math.h"
int median; /舵机中值
float error=0; //偏差
float frequency; /频率
int f;//定义备用
int t;//定义备用
int main(void)
{
median=757; //舵机中值这套程序测出为92/93
int infrared1,infrared2,infrared3,infrared4,infrared5;//定义五个红外对管
// int f=0;
// int t=0;
get_clk();
ftm_pwm_init(ftm1,ftm_ch0,50,92); //舵机初始化
ftm_pwm_init(ftm2,ftm_ch0,15000,990); //电机初始化
ftm_pwm_init(ftm2,ftm_ch1,15000,990); //ftm0模块,0通道,50HZ,百分之50的占空比
ftm_pwm_init(ftm2,ftm_ch2,15000,990);
ftm_pwm_init(ftm2,ftm_ch3,15000,990);
gpio_init(A0,GPI,0);//初始化A0为gpio模式,设置为输出模式,初始化输出低电平
gpio_init(A1,GPI,0);//同上
gpio_init(A2,GPI,0);
gpio_init(A3,GPI,0);
gpio_init(A6,GPI,0);
port_pull(A0);E0 上拉电阻开启 A0,1,2,3,6为红外管引脚口
port_pull(A1);
port_pull(A2);
port_pull(A3);
port_pull(A6);
while(1)
{
ftm_pwm_duty(ftm2,ftm_ch0,990);//正转990为电机占空比
ftm_pwm_duty(ftm2,ftm_ch1,0);//反转视硬件情况选择
ftm_pwm_duty(ftm2,ftm_ch2,990);
ftm_pwm_duty(ftm2,ftm_ch3,0);
infrared1=gpio_get(A0);
infrared2=gpio_get(A1);
infrared3=gpio_get(A2);
infrared4=gpio_get(A3);
infrared5=gpio_get(A6);
if(infrared3==1&&t==0)//出库
{
ftm_pwm_duty(ftm1,ftm_ch0,110);
ftm_pwm_duty(ftm2,ftm_ch0,990);
ftm_pwm_duty(ftm2,ftm_ch1,0);
ftm_pwm_duty(ftm2,ftm_ch2,990);
ftm_pwm_duty(ftm2,ftm_ch3,0);
systick_delay_ms(600);//延时程序600毫秒 视情况加减
t++;
}
if(infrared1==0&&infrared2==0&&infrared4==0&&infrared5==0&&infrared3==0)//直行
{
ftm_pwm_duty(ftm1,ftm_ch0,92); //舵机打角
//大于92右转,小于92左转
ftm_pwm_duty(ftm2,ftm_ch0,990);
ftm_pwm_duty(ftm2,ftm_ch1,0);
ftm_pwm_duty(ftm2,ftm_ch2,990);
ftm_pwm_duty(ftm2,ftm_ch3,0);
}
if(infrared1==1&&infrared5==0)//右转弯
{
ftm_pwm_duty(ftm1,ftm_ch0,103);
ftm_pwm_duty(ftm2,ftm_ch0,990);
ftm_pwm_duty(ftm2,ftm_ch1,0);
ftm_pwm_duty(ftm2,ftm_ch2,990);
ftm_pwm_duty(ftm2,ftm_ch3,0);
}
if(infrared1==1&&infrared2==1&&infrared4==0&&infrared5==0)//右转弯 大
{
ftm_pwm_duty(ftm1,ftm_ch0,109);
ftm_pwm_duty(ftm2,ftm_ch0,990);
ftm_pwm_duty(ftm2,ftm_ch1,0);
ftm_pwm_duty(ftm2,ftm_ch2,990);
ftm_pwm_duty(ftm2,ftm_ch3,0);
}
//避免硬件问题导致车不能正常打打角 下同
if(infrared1==0&&infrared2==1&&infrared4==0&&infrared5==0)//右转弯 大
{
ftm_pwm_duty(ftm1,ftm_ch0,109);
ftm_pwm_duty(ftm2,ftm_ch0,990);
ftm_pwm_duty(ftm2,ftm_ch1,0);
ftm_pwm_duty(ftm2,ftm_ch2,990);
ftm_pwm_duty(ftm2,ftm_ch3,0);
}
if(infrared1==0&&infrared5==1)//左转
{
ftm_pwm_duty(ftm1,ftm_ch0,85);
ftm_pwm_duty(ftm2,ftm_ch0,990);
ftm_pwm_duty(ftm2,ftm_ch1,0);
ftm_pwm_duty(ftm2,ftm_ch2,990);
ftm_pwm_duty(ftm2,ftm_ch3,0);
}
if(infrared1==0&&infrared2==0&&infrared4==1&&infrared5==1)//左转 大
{
ftm_pwm_duty(ftm1,ftm_ch0,73);
ftm_pwm_duty(ftm2,ftm_ch0,990);
ftm_pwm_duty(ftm2,ftm_ch1,0);
ftm_pwm_duty(ftm2,ftm_ch2,990);
ftm_pwm_duty(ftm2,ftm_ch3,0);
}
if(infrared1==0&&infrared2==0&&infrared4==1&&infrared5==0)//左转 大
{
ftm_pwm_duty(ftm1,ftm_ch0,73);
ftm_pwm_duty(ftm2,ftm_ch0,990);
ftm_pwm_duty(ftm2,ftm_ch1,0);
ftm_pwm_duty(ftm2,ftm_ch2,990);
ftm_pwm_duty(ftm2,ftm_ch3,0);
}
if(infrared1==0&&infrared2==0&&infrared3==0&&infrared4==0&&infrared5==0)//十字路口
{
ftm_pwm_duty(ftm1,ftm_ch0,91);
ftm_pwm_duty(ftm2,ftm_ch0,990);
ftm_pwm_duty(ftm2,ftm_ch1,0);
ftm_pwm_duty(ftm2,ftm_ch2,990);
ftm_pwm_duty(ftm2,ftm_ch3,0);
}
if(infrared4==1&&infrared3==1&&infrared2==1&&infrared1==1)//停车
{
ftm_pwm_duty(ftm1,ftm_ch0,92);
ftm_pwm_duty(ftm2,ftm_ch0,0);
ftm_pwm_duty(ftm2,ftm_ch1,0);
ftm_pwm_duty(ftm2,ftm_ch2,0);
ftm_pwm_duty(ftm2,ftm_ch3,0);
}
// while(1)
// {
if((infrared1==1&&infrared3==1&&f==0)||(infrared2==1&&infrared4==1&&f==0)||(infrared2==1&&infrared3==1&&infrared4==1&&f==0)||(infrared3==1&&infrared2==1&&infrared5==1&&f==0)||(infrared1==1&&infrared4==1&&f==0)&&(infrared2==1&&infrared5==1&&f==0))//停车
{
ftm_pwm_duty(ftm1,ftm_ch0,105); //入库
ftm_pwm_duty(ftm2,ftm_ch0,400);
ftm_pwm_duty(ftm2,ftm_ch1,0);
ftm_pwm_duty(ftm2,ftm_ch2,400);
ftm_pwm_duty(ftm2,ftm_ch3,0);
systick_delay_ms(800);
f++;
// }
}
// while(1)
// {
//
// if(infrared3==1&&f==0)//右转弯 大 环岛
// {
//
// ftm_pwm_duty(ftm1,ftm_ch0,108);
//
// ftm_pwm_duty(ftm2,ftm_ch0,700);
// ftm_pwm_duty(ftm2,ftm_ch1,0);
// ftm_pwm_duty(ftm2,ftm_ch2,700);
// ftm_pwm_duty(ftm2,ftm_ch3,0);
// systick_delay_ms(8000);
// f=1;
// }
// if(infrared3==1&&t==0)//右转弯 大 环岛
// {
//
// ftm_pwm_duty(ftm1,ftm_ch0,100);
//
// ftm_pwm_duty(ftm2,ftm_ch0,800);
// ftm_pwm_duty(ftm2,ftm_ch1,0);
// ftm_pwm_duty(ftm2,ftm_ch2,750);
// ftm_pwm_duty(ftm2,ftm_ch3,0);
// systick_delay_ms(8000);
// t=1;
// }
// if(infrared3==1&&j==0)//右转弯 大 环岛
// {
//
// ftm_pwm_duty(ftm1,ftm_ch0,100);
//
// ftm_pwm_duty(ftm2,ftm_ch0,800);
// ftm_pwm_duty(ftm2,ftm_ch1,0);
// ftm_pwm_duty(ftm2,ftm_ch2,750);
// ftm_pwm_duty(ftm2,ftm_ch3,0);
// systick_delay_ms(2000);
// }
}
}//其他部分自己可以适当增添删改 这里建议环岛不要用延时程序与电源电压有影响会出现隔夜车现象