|
這是上個(gè)月做的基于K60控制的智能循跡避障小車通過五路紅外傳感器使小車沿著黑線循跡
通過HC-SR04來(lái)進(jìn)行避障- #include "common.h"
- #include "include.h"
- int date=2;
- int i=3;
- int distance=399; //測(cè)量距離
- int Time = 100000;
- uint32 timevar;
- //直行
- void straight()
- {
- gpio_set(PTE8, 1);//右
- gpio_set(PTE9, 0); //右
- gpio_set(PTE10,0);//左
- gpio_set(PTE11,1); //左
- ftm_pwm_duty(FTM0, FTM_CH0,25);
- ftm_pwm_duty(FTM0, FTM_CH2,25);
- }
- //慢直行
- void slow()
- {
- gpio_set(PTE8, 1);//右
- gpio_set(PTE9, 0); //右
- gpio_set(PTE10,0);//左
- gpio_set(PTE11,1); //左
- ftm_pwm_duty(FTM0, FTM_CH0,10);
- ftm_pwm_duty(FTM0, FTM_CH2,10);
- }
- //左轉(zhuǎn)彎
- void left()
- {
- gpio_set(PTE8, 1);//右
- gpio_set(PTE9, 0); //右
- gpio_set(PTE10,1);//左
- gpio_set(PTE11,0); //左
- ftm_pwm_duty(FTM0, FTM_CH0,23);
- ftm_pwm_duty(FTM0, FTM_CH2,7);
- }
- //左轉(zhuǎn)大彎
- void bigleft()
- {
- gpio_set(PTE8,1);
- gpio_set(PTE9,0);
- gpio_set(PTE10,1);
- gpio_set(PTE11,0);
- ftm_pwm_duty(FTM0, FTM_CH0,30);
- ftm_pwm_duty(FTM0, FTM_CH2,12);
- }
- //右轉(zhuǎn)彎
- void right()
- {
- gpio_set(PTE8,0);
- gpio_set(PTE9,1);
- gpio_set(PTE10,0);
- gpio_set(PTE11,1);
- ftm_pwm_duty(FTM0, FTM_CH0,7);
- ftm_pwm_duty(FTM0, FTM_CH2,23);
- }
- //右轉(zhuǎn)大彎
- void bigright()
- {
- gpio_set(PTE8,0);
- gpio_set(PTE9,1);
- gpio_set(PTE10,0);
- gpio_set(PTE11,1);
- ftm_pwm_duty(FTM0, FTM_CH0,12);
- ftm_pwm_duty(FTM0, FTM_CH2,30);
- }
- //停
- void stop()
- {
- gpio_set(PTE8,0);
- gpio_set(PTE9,0);
- gpio_set(PTE10,0);
- gpio_set(PTE11,0);
- ftm_pwm_duty(FTM0, FTM_CH0,0);
- ftm_pwm_duty(FTM0, FTM_CH2,0);
- }
- //后退
- void back()
- {
- gpio_set(PTE8,0);
- gpio_set(PTE9,1);
- gpio_set(PTE10,1);
- gpio_set(PTE11,0);
- ftm_pwm_duty(FTM0, FTM_CH0,17);
- ftm_pwm_duty(FTM0, FTM_CH2,17);
- }
- //TRIG發(fā)射脈沖
- void trigpulse()
- {
- gpio_set(PTA25,1); //產(chǎn)生觸發(fā)脈沖
- systick_delay_us(15);
- gpio_set(PTA25,0); //產(chǎn)生一個(gè)20us的高電平脈沖
- }
- //超聲波測(cè)距
- void chaoshengbo()
- {
-
- gpio_set(PTA25,1); //產(chǎn)生觸發(fā)脈沖
- systick_delay_us(15);
- gpio_set(PTA25,0); //產(chǎn)生一個(gè)20us的高電平脈沖
- while(gpio_get(PTA27)==0); //等待電平變高,低電平一直等待
- pit_time_start(PIT0); //開始計(jì)時(shí)
- while(gpio_get(PTA27)==1); //等待電平變低,高電平一直等待
- Time=pit_time_get_us(PIT0); //停止計(jì)時(shí),獲取計(jì)時(shí)時(shí)間
- // timevar=Time*1000/bus_clk_khz;
- // distance = timevar*(331.4+0.607*20)/20000;
- distance = (int)(Time*1.7)/100;
- systick_delay_ms(60);
- }
- //超聲波左轉(zhuǎn)
- void HCleft()
- {
- gpio_set(PTE8,1);
- gpio_set(PTE9,0);
- gpio_set(PTE10,0);
- gpio_set(PTE11,1);
- ftm_pwm_duty(FTM0, FTM_CH0,45);//右
- ftm_pwm_duty(FTM0, FTM_CH2,15);//左
- }
- //超聲波右轉(zhuǎn)
- void HCright()
- {
- gpio_set(PTE8,1);
- gpio_set(PTE9,0);
- gpio_set(PTE10,0);//左
- gpio_set(PTE11,1); //左
- ftm_pwm_duty(FTM0, FTM_CH0,15);
- ftm_pwm_duty(FTM0, FTM_CH2,50);
- }
- void xunji()
- {
- //循跡 PTB4-右輪
- if((gpio_get(PTB4)==1)&&(gpio_get(PTB5)==1)&&(gpio_get(PTB6)==1)&(gpio_get(PTB7)==1)&&(gpio_get(PTC0)==1))
- {
- // gpio_set(PTE8, 1);//右
- // gpio_set(PTE9, 0); //右
- // gpio_set(PTE10,0);//左
- // gpio_set(PTE11,1); //左
- // ftm_pwm_duty(FTM0, FTM_CH0,15);
- // ftm_pwm_duty(FTM0, FTM_CH2,15);
- slow();
- systick_delay_ms(10);
- }
- if((gpio_get(PTB4)==1)&&(gpio_get(PTB5)==1)&&(gpio_get(PTB6)==0)&(gpio_get(PTB7)==1)&&(gpio_get(PTC0)==1))
- {
- straight();
- systick_delay_ms(10);
- }
- //右轉(zhuǎn)小彎
- if((gpio_get(PTB4)==1)&&(gpio_get(PTB5)==1)&&(gpio_get(PTB6)==1)&(gpio_get(PTB7)==0)&&(gpio_get(PTC0)==1))
- {
- right();
- systick_delay_ms(10);
- }
- //左轉(zhuǎn)小彎
- if((gpio_get(PTB4)==1)&&(gpio_get(PTB5)==0)&&(gpio_get(PTB6)==1)&(gpio_get(PTB7)==1)&&(gpio_get(PTC0)==1))
- {
- left();
- systick_delay_ms(10);
- }
- //右轉(zhuǎn)大彎
- if((gpio_get(PTB4)==1)&&(gpio_get(PTB5)==1)&&(gpio_get(PTB6)==1)&(gpio_get(PTB7)==1)&&(gpio_get(PTC0)==0))
- {
- bigright();
- systick_delay_ms(10);
- }
- //左轉(zhuǎn)大彎
- if((gpio_get(PTB4)==0)&&(gpio_get(PTB5)==1)&&(gpio_get(PTB6)==1)&(gpio_get(PTB7)==1)&&(gpio_get(PTC0)==1))
- {
- bigleft();
- systick_delay_ms(10);
- }
- }
- void pit2_hander()
- {
- led (LED0,LED_ON);
- led (LED1,LED_ON);
- led (LED2,LED_ON);
- date--;
- PIT_Flag_Clear(PIT2);
- }
- void main()
- {
- led_init(LED0);
- led_init(LED1);
- led_init(LED2);
- gpio_init(PTE8, GPO, 1);
- gpio_init(PTE9, GPO, 0);
- gpio_init(PTE10, GPO,0);
- gpio_init(PTE11, GPO,1);
- gpio_init(PTB4, GPI, 0);
- gpio_init(PTB5, GPI, 0);
- gpio_init(PTB6, GPI, 0);
- gpio_init(PTB7, GPI, 0);
- gpio_init(PTC0, GPI, 0);
- gpio_init(PTA25, GPO, 0); //TRIG
- gpio_init (PTA27, GPI, 0); //ECHO
- ftm_pwm_init(FTM0, FTM_CH0,200,18);
- ftm_pwm_init(FTM0, FTM_CH2,200,18);
-
- pit_init_ms(PIT2, 14000); //初始化 PIT2,定時(shí)時(shí)間為:14s
- set_vector_handler(PIT2_VECTORn,pit2_hander);
- enable_irq(PIT2_IRQn);
-
- // disable_irq(PIT2_IRQn);
- while(i>2)//i>2
- {
- xunji();
- while(date<2)
- {
- trigpulse();
- chaoshengbo();
- if(distance<70)
- {
- i=2;
- HCleft();
- systick_delay_ms(1000);
- HCright();
- systick_delay_ms(600);
- }
- }
- }
- while(i==2)
- {
- xunji();
- }
- }
復(fù)制代碼
|
|