智能小车先直走再循迹 实现不了?
时间:10-02
整理:3721RD
点击:
我想使小车实现先直走后循迹的功能,这段程序已经能实现循迹,
#include<reg51.h>
#define sen_port P0 //传感器入口
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit EN1=P1^4;
sbit EN2=P1^5;
sbit IN1a=P2^0;
sbit IN2a=P2^1;
sbit IN3a=P2^2;
sbit IN4a=P2^3;
sbit EN1a=P2^4;
sbit EN2a=P2^5;
void delay(int n) //延时子程序
{ unsigned char i,j,k;
for(i=n;i>0;i--);
for(j=50;j>0;j--);
for(k=100;k>0;k--);
}
unsigned char sensor_inp()
{
unsigned char sensor;
sensor=sen_port;
sensor&=0x0f;
//P0=sensor;
return sensor;
}
void faward()
{ EN1=1; EN2=1; IN1=1; IN2=0; IN3=1; IN4=0;EN1a=1; EN2a=1; IN1a=1; IN2a=0; IN3a=1; IN4a=0;}
void turn_right()
{ EN1=1; EN2=1;EN1a=1; EN2a=1;IN1=1; IN2=0;IN3=0; IN4=1;IN1a=1; IN2a=0; IN3a=0; IN4a=1; }
void turn_right1()
{ EN1=1; EN2=1;EN1a=1; EN2a=1;IN1=1; IN2=0;IN3=0; IN4=0;IN1a=1; IN2a=0; IN3a=0; IN4a=1; }//右单轮停
void turn_left()
{EN1=1; EN2=1; IN1=0; IN2=1; IN3=1; IN4=0;EN1a=1; EN2a=1; IN1a=0; IN2a=1; IN3a=1; IN4a=0;}
void turn_left1()
{EN1=1; EN2=1; IN1=0; IN2=0; IN3=1; IN4=0;EN1a=1; EN2a=1; IN1a=0; IN2a=1; IN3a=1; IN4a=0;} //左单轮停
void back()
{EN1=1; EN2=1; IN1=0; IN2=1; IN3=0; IN4=1;EN1a=1; EN2a=1; IN1a=0; IN2a=1; IN3a=0; IN4a=1;delay(100); }
void ts()
{ EN1=1; EN2=1; IN1=0; IN2=1; IN3=0; IN4=1;EN1a=1; EN2a=1; IN1a=1; IN2a=0; IN3a=0; IN4a=0;}
void main(void)
{
P0=0x0f;
while(1)
{
switch( sensor_inp() )
{
case 0x00: faward();delay(100);//全白线 前进
case 0x01: turn_left();delay(120);break; //左在线上,左大转
case 0x02: turn_left();delay(90); break; //中右在线上,右中转
case 0x03: turn_left();delay(80);break; //右、中右在线上,右小转
case 0x04: turn_right(); delay(100);break;
case 0x05: ts();delay(90);break;
case 0x06: turn_left();delay(90);break;
case 0x07: turn_left();delay(90);break;
case 0x08: turn_right();delay(120);break;
case 0x09: faward(); break;
case 0x0a: turn_right();delay(100);break;
case 0x0b: turn_left();delay(90); break; //左出线,往右拐
case 0x0c: turn_right();delay(80); break; //右出,往左拐
case 0x0d:turn_right();delay(90); break;
case 0x0e: turn_right();delay(100);break;
case 0x0f: back();delay(100);break;
default: faward(); break; }
}
}
然后我在主程序加上faward();delay(100);,小车一直直走,无法循迹。
求大手指教啊~~!
#include<reg51.h>
#define sen_port P0 //传感器入口
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit EN1=P1^4;
sbit EN2=P1^5;
sbit IN1a=P2^0;
sbit IN2a=P2^1;
sbit IN3a=P2^2;
sbit IN4a=P2^3;
sbit EN1a=P2^4;
sbit EN2a=P2^5;
void delay(int n) //延时子程序
{ unsigned char i,j,k;
for(i=n;i>0;i--);
for(j=50;j>0;j--);
for(k=100;k>0;k--);
}
unsigned char sensor_inp()
{
unsigned char sensor;
sensor=sen_port;
sensor&=0x0f;
//P0=sensor;
return sensor;
}
void faward()
{ EN1=1; EN2=1; IN1=1; IN2=0; IN3=1; IN4=0;EN1a=1; EN2a=1; IN1a=1; IN2a=0; IN3a=1; IN4a=0;}
void turn_right()
{ EN1=1; EN2=1;EN1a=1; EN2a=1;IN1=1; IN2=0;IN3=0; IN4=1;IN1a=1; IN2a=0; IN3a=0; IN4a=1; }
void turn_right1()
{ EN1=1; EN2=1;EN1a=1; EN2a=1;IN1=1; IN2=0;IN3=0; IN4=0;IN1a=1; IN2a=0; IN3a=0; IN4a=1; }//右单轮停
void turn_left()
{EN1=1; EN2=1; IN1=0; IN2=1; IN3=1; IN4=0;EN1a=1; EN2a=1; IN1a=0; IN2a=1; IN3a=1; IN4a=0;}
void turn_left1()
{EN1=1; EN2=1; IN1=0; IN2=0; IN3=1; IN4=0;EN1a=1; EN2a=1; IN1a=0; IN2a=1; IN3a=1; IN4a=0;} //左单轮停
void back()
{EN1=1; EN2=1; IN1=0; IN2=1; IN3=0; IN4=1;EN1a=1; EN2a=1; IN1a=0; IN2a=1; IN3a=0; IN4a=1;delay(100); }
void ts()
{ EN1=1; EN2=1; IN1=0; IN2=1; IN3=0; IN4=1;EN1a=1; EN2a=1; IN1a=1; IN2a=0; IN3a=0; IN4a=0;}
void main(void)
{
P0=0x0f;
while(1)
{
switch( sensor_inp() )
{
case 0x00: faward();delay(100);//全白线 前进
case 0x01: turn_left();delay(120);break; //左在线上,左大转
case 0x02: turn_left();delay(90); break; //中右在线上,右中转
case 0x03: turn_left();delay(80);break; //右、中右在线上,右小转
case 0x04: turn_right(); delay(100);break;
case 0x05: ts();delay(90);break;
case 0x06: turn_left();delay(90);break;
case 0x07: turn_left();delay(90);break;
case 0x08: turn_right();delay(120);break;
case 0x09: faward(); break;
case 0x0a: turn_right();delay(100);break;
case 0x0b: turn_left();delay(90); break; //左出线,往右拐
case 0x0c: turn_right();delay(80); break; //右出,往左拐
case 0x0d:turn_right();delay(90); break;
case 0x0e: turn_right();delay(100);break;
case 0x0f: back();delay(100);break;
default: faward(); break; }
}
}
然后我在主程序加上faward();delay(100);,小车一直直走,无法循迹。
求大手指教啊~~!