超声波避障小车和蓝牙小车源代码

电机控制部分代码:

/***************************************************************************************
  内容:舵机控制原理
  输出:以05ms为基准的电平信号输出
***************************************************************************************/#include<reg52.h>
#include"Dianji.h"
#include"Chaoshengbo.h"
#include"Duoji.h"
/* 定义电机端口 */
sbit EA1 = P0^2;
sbit D11 = P0^3;
sbit D12 = P0^4;
sbit D21 = P0^5;
sbit D22 = P0^6;
sbit EA2 = P0^7;

/* 超声波舵机云台避障标志 */
bit Duoji_Flag1 = 0;
bit Duoji_Flag2 = 0;
bit flag22=0;
unsigned char left_distance,right_distance;
/******************************************************
       名称:电机端口使能
	   作用:使能电机端口在运行状态
******************************************************/
void Dianji_Enabled(void){
  EA1 = 1;
  EA2 = 1;
}

/******************************************************
       名称:电机端口禁止
	   作用:禁止电机端口在运行状态
******************************************************/
void Dianji_Prohibit(void){
  EA1 = 0;
  EA2 = 0;
}
/******************************************************
       名称:小车运行状态
	   作用:小车前进
******************************************************/
void Dianji_Forward(void){
    D11 = 1;
    D12 = 0; 
 	D21 = 1;
	D22 = 0;
}
/******************************************************
       名称:小车运行状态
	   作用:小车后退
******************************************************/
void Dianji_Back(void){
    D11 = 0;
	D12 = 1;
	D21 = 0;
	D22 = 1;
}
/******************************************************
       名称:小车运行状态
	   作用:小车左拐
******************************************************/
void Dianji_Turn_Left(void){
    D11 = 0;
	D12 = 1;
	D21 = 1;
	D22 = 0;
}
/******************************************************
       名称:小车运行状态
	   作用:小车右拐
******************************************************/
void Dianji_Turn_Right(void){
    D11 = 1;
	D12 = 0;
	D21 = 0;
	D22 = 1;
}
/******************************************************
       名称:小车运行状态
	   作用:小车停止
******************************************************/
void Dianji_Turn_Stop(void){
    D11 = 0;
	D12 = 0;
	D21 = 0;
	D22 = 0;
}
/**************************************************************
    名称:延时函数
	作用:延迟一毫秒时间
***************************************************************/
void Dianji_Delayms(unsigned int ms){
	unsigned int i;
	while(ms--){
	for(i = 0; i < 120; i++);
	}
}

void Dianji_Duoji_ChaoshengboStatus(void)
{
  Chaoshengbo_GetData();  //超声波数据获得
  if(Conut() <=BENCHMARK)
  {       //超声波数据计算并返回
    
    Dianji_Turn_Stop();
    Dianji_Delayms(150);//延时200毫秒
    Chaoshengbo_GetData();  //超声波数据获得
    if(Conut() <=BENCHMARK)
    {
          flag22=1;
          if(Conut() <10)
          { 
             Dianji_Back();
             Dianji_Delayms(150);//延时
             Dianji_Turn_Stop();
          }
        
          Duoji_Positive_90Degree();//舵机正方向旋转90度
	       Dianji_Delayms(200);//延时200毫秒
          Chaoshengbo_GetData();//超声波数据获得
          Dianji_Delayms(200);//延时200毫秒
          left_distance=0;
          Chaoshengbo_GetData();//超声波数据获得
          left_distance=Conut();
          if(left_distance> BENCHMARK)
          {
               
                 Duoji_Flag1 = 1;  //舵机云台超声波避障正90度标志置为1 
          }
          Duoji_Negative_90Degree();//舵机反方向旋转90度
	       Dianji_Delayms(200);//延时200毫秒
          Chaoshengbo_GetData();//超声波数据获得
          Dianji_Delayms(200);//延时200毫秒
          right_distance=0;
          Chaoshengbo_GetData();//超声波数据获得
          right_distance=Conut();
          if(right_distance> BENCHMARK)
          {
              Duoji_Flag2 = 1;   //舵机云台超声波避障反90度标志置为1   
          }
	       Dianji_Delayms(200);//延时200毫秒
          Duoji_Zero_0Degree();//舵机回正
          
    }
  }
}
/**************************************************************
    名称:电机运行
	作用:电机超声波壁障运行
***************************************************************/
void Dianji_Barrie_Run(void)
{
  Dianji_Duoji_ChaoshengboStatus();
l1:  if( flag22==1 && Duoji_Flag1 == 1 && Duoji_Flag2 == 0)
     { //如果正前方有障碍物
        Duoji_Flag1 = 0;
        flag22=0;
	     Duoji_Flag2 = 0;
        Dianji_Turn_Left();  //左拐
        Dianji_Delayms(100);//延时
        return;
      } 
     else if(flag22==1 && Duoji_Flag1 == 0 && Duoji_Flag2 == 1)
     {
        Duoji_Flag1 = 0;
        flag22=0;
        Duoji_Flag2 = 0; 
	     Dianji_Turn_Right();//右转	
        Dianji_Delayms(100);//延时一秒
        return;
     }
     else if(flag22==1 && Duoji_Flag1 == 1 && Duoji_Flag2 == 1)
     {
        Duoji_Flag1 = 0;
        flag22=0;
        Duoji_Flag2 = 0;
        if(left_distance>right_distance)
        {
            Dianji_Turn_Left();  //左拐
        }
        else
        {
	         Dianji_Turn_Right();//右转	
        }
        Dianji_Delayms(100);//延时一秒
        return;
     }
     else if(flag22==1 && Duoji_Flag1 == 0 &&Duoji_Flag2 == 0 )
     {
        Duoji_Flag1 = 0;
        flag22=0;
        Duoji_Flag2 = 0; 
        Dianji_Back();
        Dianji_Delayms(100);//延时
        Dianji_Turn_Left();  //左拐
        Dianji_Delayms(250);//延时
        return;
     }
    Dianji_Duoji_ChaoshengboStatus();
   if(flag22==1)
   {
     goto l1;
   }
   Dianji_Forward();//正常状态小车前行
}

超声波避障小车和蓝牙小车的源代码在我的公众号里有,还有很多关于计算机的资料,拿走的加个关注点个赞呗!

超声波避障小车和蓝牙小车源代码_第1张图片

你可能感兴趣的:(硬件)