当前位置:文档之家› 超声波自动避障小车

超声波自动避障小车


check(); if(m==0) { stop(); dj_z(); delay(400); check(); delay(20); if(m==0) z=0; dj_y(); delay(800); check(); delay(20); if(m==0) y=0; dj_q(); delay(400); if(z==0&&y==0) { turn_d(); delay(300); stop(); delay(300); turn_z(); delay(300); } if(z==1&&y==0) { turn_z(); delay(300); } if(z==0&&y==1) { turn_y(); delay(300); } if(z==1&&y==1) { turn_y(); delay(300); } } void InitTimer0(uchar k) { deg=k; TMOD = 0x01; TH0 = 0x0B1; TL0 = 0x0E0; EA = 1; ET0 = 1; TR0 = 1; } void dj_z()//舵机转向左边 { InitTimer0(180); P1_2=0; } void dj_q()//舵机转向正前方 { InitTimer0(105); P1_2=0; } void dj_y()//舵机转向右方 { InitTimer0(37 ); P1_2=0; } void main() { Trig=0; EA=1; TMOD=0x10; ENA=0; ENB=0; dj_q(); delay(400); while(1) { z=1; q=1; y=1;
} } void exter() interrupt 0 { EX0=0; timeH =TH1; timeL =TL1; succeed_flag=1; } void Timer0Interrupt() interrupt 1 { //20ms 中断 TH0 = 0x0B1; TL0 = 0x0E0; P1_2=1; delay_deg(); P1_2=0; } void timer1() interrupt 3 { TH1=0; TL1=0; }
ENA=1; IN1=1; IN2=0; ENB=1; IN3=0; IN4=1; //delay(300);//状态保持 100ms } void turn_y()//右转 { ENB=1; IN3=1; IN4=0; ENA=1; IN1=0; IN2=1; //delay(300);//状态保持 100ms } void turn_d()//后退 { ENA=1; IN1=0; IN2=1; ENB=1; IN3=0; IN4=1; } void forward()//前进 { ENA=1; IN1=1; IN2=0; ENB=1; IN3=1; IN4=0; } void stop()//前进 { ENA=0; IN1=0; IN2=0; ENB=0; IN3=0;
void delay_20us() { uchar a ; for(a=0;a<100;a++); } void delay_deg() //误差 0us 延时 1ms 此处可以修改高电平周期 //修改此处的延时可以更改舵机转的角度 ,45 度具体是多少 你可以试试 { unsigned char a,b,c; for(c=1;c>0;c--) for(b=deg;b>0;b--)//85 中间 140 左边 35 右边 for(a=2;a>0;a--); } void check()//避障检测 { m=1; EA=0; Trig=1; delay_20us(); Trig=0; while(Echo==0); succeed_flag=0; EA=1; EX0=1; TH1=0; TL1=0; TF1=0; TR1=1; delay(20); TR1=0; EX0=0; if(succeed_flag==1) { time=timeH*256+timeL; distance=time*0.0172+2; if(distance<50) m=0; } } void turn_z()//左转 {
#include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int uchar timeL; uchar timeH; uchar z,q,y,i,m,deg; uint time,succeed_flag,distance; sbit ENA=P2^0;//右边电机使能端 sbit IN1=P2^1;// IN1=1; IN2=0;正传 sbit IN2=P2^2; sbit ENB=P2^3;//左边电机使能端 sbit IN3=P2^4;//IN3=1;IN4=0;正转 sbit IN4=P2^5; sbit P1_2=P2^6; sbit Trig=P1^2;//超声波出发端口 sbit Echo=P3^2;//接收端口 void delay(int ms) { int i; while(ms--) { for(i = 0; i<111; i++) { _nop_(); } } }
相关主题