微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 智能小车先直走再循迹 实现不了?

智能小车先直走再循迹 实现不了?

时间: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);,小车一直直走,无法循迹。
                                  求大手指教啊~~!     

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top