微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 使用手机蓝牙控制小车,为神马总是木有效果,请大神指点

使用手机蓝牙控制小车,为神马总是木有效果,请大神指点

时间:10-02 整理:3721RD 点击:
/*********控制小车行驶************/
#include "reg52.h"
#define UCHAR unsigned char
#define UP  'A'
#define DOWN  'B'
#define LEFT  'C'
#define RIGHT 'D'
#define STOP  'F'
sbit RB=P1^0;     //右后轮
sbit rb=P1^1;
sbit RF=P1^2;      //右前轮
sbit rf=P1^3;
sbit LB=P1^4;     //左后轮
sbit lb=P1^5;
sbit LF=P1^6;     //左前轮
sbit lf=P1^7;
UCHAR count=0,flag=0,len=0,h=0,r[3]=0,flag_con=0;
unsigned int a;
/***************小车运动细节*************************/
/***********小车前进部分*****************/
void L_forward(UCHAR num)      // 小车左排轮前进,num可调整占空比
{
   LF=1;lf=0;
   LB=0;lb=1;
  if(count<=num)
{
LF=1;
lb=1;
}
else
{
LF=0;
lb=0;
}

}
void R_forward(UCHAR num)      //小车右排轮前进,num可调整占空比
{
    RB=1;rb=0;
   RF=0;rf=1;
  if(count<=num)
{
RB=1;
rf=1;
}
else
{
RB=0;
rf=0;
}

}
/***************小车后退部分********************/
void L_drawback(UCHAR num)  //小车左排轮后退,num可调整占空比
{
   LF=0;lf=1;
   LB=1;lb=0;
if(count<=num)
   {
   lf=1;
   LB=1;
   }  
else
      {
   lf=0;
   LB=0;
   }
}
void R_drawback(UCHAR num)  //小车右排轮后退,num可调整占空比
{
   RB=0;rb=1;
   RF=1;rf=0;
if(count<=num)
   {
   rb=1;
   RF=1;
   }  
else
      {
   rb=0;
   RF=0;  
   }
}
/*********小车的基本运动状态*************/
void stop()       //小车停止
{
      RB=0;rb=0;
   RF=0;rf=0;
   LF=0;lf=0;
   LB=0;lb=0;
}
void forward(UCHAR num)  //小车前进,num可调整占空比
{
L_forward(num);
R_forward(num);
}
void drawback(UCHAR num)  //小车后退,num可调整占空比
{
L_drawback(num);
R_drawback(num);
}
void B_round(UCHAR L,UCHAR R)    //小车后退转弯
{           //L控制左排轮速度
L_drawback(L);        //R控制右排轮速度
R_drawback(R);
}
void F_round(UCHAR L,UCHAR R)    //小车前进转弯
{           //L控制左排轮速度
L_forward(L);        //R控制右排轮速度
R_forward(R);
}
void turn_right45()   //前进右转45度
{
for(a=500;a>0;a--)
{
  R_drawback(20);
     L_forward(40);
   
}
}
void turn_right90()     //前进右转90度
{
for(a=500;a>0;a--)
  {
  R_drawback(50);
     L_forward(50);
   
  }
}
void turn_left45()      //前进左转45度
{
for(a=500;a>0;a--)
  {
  R_forward(40);
     L_drawback(20);
   
  }
}
void turn_left90()      //前进左转90度
{
for(a=650;a>0;a--)
  {
  R_forward(50);
     L_drawback(50);
   
  }
}
void delay(UCHAR ms)   
{
UCHAR i,j;
for(i=ms;i>0;i--)
  for(j=110;j>0;j--);
}
void main()
{
TMOD=0x21;
TH0=(65536-9)/256;
TL0=(65536-9)%256;
TH1=0xfd;     
TL1=0xfd;        //装初值
ET0=1;
TR0=1;
TR1=1;      //定时器中断1打开
REN=1;      //允许串行口接受数据
SM0=0;      
SM1=1;      //串行口工作方式位01,10位异步收发,波特率可变
EA=1;            //打开总中断  
ES=1;      //打开串口中断
stop();
while(1)
  {
  
  if(flag_con==1)
  {
   flag_con=0;
   if(r[0]=='O'&&r[1]=='N')
   {
    ES=0;
    SBUF=r[2];
       while(!TI);
    TI=0;
    ES=1;
    switch(r[2])
    {
     case UP: forward(80);break;
     case DOWN: drawback(80);break;
     case LEFT: turn_left45();break;
     case RIGHT: turn_right45();break;
     case STOP:  stop();break;
     default:break;
    }
   
   }
   
  }  

}
}
void timer()interrupt 1
{
TH0=(65536-9)/256;
TL0=(65536-9)%256;
count++;
if(count>=100)
  {count=0;}
}
void inser() interrupt 4
{
if(RI)
{
RI=0;
h=SBUF;
if(h='O'&&(len=0))
{
   flag=1;
   r[len]=h;
   flag=1;
}
else if(flag==1)
{
  len++;
  r[len]=h;
  if(len>2)
  {
  len=0;flag=0;flag_con=1;
  }
}
}

好吧,无人问津,表示已经找到原因了`

问题终于解决了

什么原因?有舵机控制的吗?这只有前后左右的吧?

小编 能发下完整程序吗 最好有原理图....最近打算做一个 有点无从下手的感觉

308799133@qq.com、、、、  谢谢小编拉

是电机电源供电问题,电压电流不足。

表示不知道,抱歉啊啊啊啊啊

已发送,这个是可以使用的

中断冲突了,把电机的PWM周改大就行了

小编能不能也给我发一份  我现在也在做这个蓝牙小车 表示很头疼  1187879733@qq.com

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

网站地图

Top