红外寻迹小车基于K128单片机的红外对管飞思卡尔智能车(5个对管)程序部分

红外寻迹小车基于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);
          
// }
      
}
}//其他部分自己可以适当增添删改  这里建议环岛不要用延时程序与电源电压有影响会出现隔夜车现象
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chuanzhangsss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值