小车问题
时间:10-02
整理:3721RD
点击:
小车壁障加循迹程序,输到单片机为什么小车工作不正常,壁障也不准确,压根就没循迹迹象,以下附程序,望大神指点
#include<AT89X52.H>
#include<xunji.h>
#define Left_1_led P3_7
#define Left_2_led P3_6
#define Right_1_led P3_5
#define Right_2_led P3_4
#define waibu P2_0
#define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左边两个电机向前走
#define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左边两个电机向后转
#define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左边两个电机停转
#define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右边两个电机向前走
#define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右边两个电机向前走
#define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右边两个电机停转
/************************************************************************/
//延时函数
void delay(unsigned int k)
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
/************************************************************************/
//前速前进
void run(void)
{
Left_moto_go ;
Right_moto_go ;
}
/************************************************************************/
//后退
void backrun(void)
{
Left_moto_back ; //左电机往前走
Right_moto_back ; //右电机往前走
}
/************************************************************************/
//停止
void stoprun(void)
{
Left_moto_Stop ; //左电机往前走
Right_moto_Stop ; //右电机往前走
}
/************************************************************************/
//左转
void leftrun(void)
{
Left_moto_back ; //左电机往前走
Right_moto_go ; //右电机往前走
}
/************************************************************************/
//右转
void rightrun(void)
{
Left_moto_go ; //左电机往前走
Right_moto_back ; //右电机往前走
}
void xunji()
{
if(Left_2_led==1&&Right_1_led==1)
backrun();
if(Left_2_led==0&&Right_1_led==1)
rightrun();
if(Left_2_led==1&&Right_1_led==0)
leftrun();
if(Left_2_led==0&&Right_1_led==0)
run();
}
void bizhang()
{
if(Left_2_led==1&&Right_1_led==1)
{
if((Left_1_led==1&&Right_2_led==1)||(Left_1_led==0&&Right_2_led==0))
backrun();
if((Left_1_led==0&&Right_2_led==1)||(Left_1_led==0&&Right_2_led==0)||(Left_1_led==1&&Right_2_led==0))
rightrun();
if((Left_1_led==0&&Right_2_led==1)||(Left_1_led==1&&Right_2_led==1))
leftrun();
if((Left_1_led==0&&Right_2_led==0))
{
while((!Right_2_led))
{
run();
}
}
}
}
void main()
{
while(1)
{
xunji();
bizhang();
}
}
头文件为
#include <AT89X52.H>
#ifndef _XUNJI_
#define _XUNJI_
#define uint unsigned int
#define uchar unsigned char
void fun1();
void fun3();
void fun4();
void fun5();
void bz1();
void bz2();
void bz3();
void xunji();
void bizhang();
void xunji();
void bizhang();
#endif
#include<AT89X52.H>
#include<xunji.h>
#define Left_1_led P3_7
#define Left_2_led P3_6
#define Right_1_led P3_5
#define Right_2_led P3_4
#define waibu P2_0
#define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左边两个电机向前走
#define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左边两个电机向后转
#define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左边两个电机停转
#define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右边两个电机向前走
#define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右边两个电机向前走
#define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右边两个电机停转
/************************************************************************/
//延时函数
void delay(unsigned int k)
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
/************************************************************************/
//前速前进
void run(void)
{
Left_moto_go ;
Right_moto_go ;
}
/************************************************************************/
//后退
void backrun(void)
{
Left_moto_back ; //左电机往前走
Right_moto_back ; //右电机往前走
}
/************************************************************************/
//停止
void stoprun(void)
{
Left_moto_Stop ; //左电机往前走
Right_moto_Stop ; //右电机往前走
}
/************************************************************************/
//左转
void leftrun(void)
{
Left_moto_back ; //左电机往前走
Right_moto_go ; //右电机往前走
}
/************************************************************************/
//右转
void rightrun(void)
{
Left_moto_go ; //左电机往前走
Right_moto_back ; //右电机往前走
}
void xunji()
{
if(Left_2_led==1&&Right_1_led==1)
backrun();
if(Left_2_led==0&&Right_1_led==1)
rightrun();
if(Left_2_led==1&&Right_1_led==0)
leftrun();
if(Left_2_led==0&&Right_1_led==0)
run();
}
void bizhang()
{
if(Left_2_led==1&&Right_1_led==1)
{
if((Left_1_led==1&&Right_2_led==1)||(Left_1_led==0&&Right_2_led==0))
backrun();
if((Left_1_led==0&&Right_2_led==1)||(Left_1_led==0&&Right_2_led==0)||(Left_1_led==1&&Right_2_led==0))
rightrun();
if((Left_1_led==0&&Right_2_led==1)||(Left_1_led==1&&Right_2_led==1))
leftrun();
if((Left_1_led==0&&Right_2_led==0))
{
while((!Right_2_led))
{
run();
}
}
}
}
void main()
{
while(1)
{
xunji();
bizhang();
}
}
头文件为
#include <AT89X52.H>
#ifndef _XUNJI_
#define _XUNJI_
#define uint unsigned int
#define uchar unsigned char
void fun1();
void fun3();
void fun4();
void fun5();
void bz1();
void bz2();
void bz3();
void xunji();
void bizhang();
void xunji();
void bizhang();
#endif