找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1988|回复: 9
打印 上一主题 下一主题
收起左侧

单片机蓝牙小车通信问题,朋友们急求答案

[复制链接]
跳转到指定楼层
楼主
8黑币
DIY的蓝牙小车,在手机和单片机通信的时候APP显示已经连接了蓝牙,但点击APP上设置的对应按钮时小车没有反应,有没有遇到这种情况的朋友,求解,程序在评论里。

6E9647EDFCDE8E20B8BA3B0C0044ACD9.jpg (96.85 KB, 下载次数: 66)

6E9647EDFCDE8E20B8BA3B0C0044ACD9.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:711376 发表于 2020-5-24 18:22 | 只看该作者
#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

typedef unsigned int u16;         
typedef unsigned char u8;

sbit IN1 = P1^2;
sbit IN2 = P1^3;
sbit IN3 = P1^6;
sbit IN4 = P1^7;
/*sbit EN1 = P1^4;
  sbit EN2 = P1^5;

#define left_motor_go                IN1 =1 , IN2 = 0
#define left_motor_back                IN1 = 0, IN2 = 1
#define right_motor_go                IN3 = 1, IN4 = 0
#define right_motor_back        IN3 = 0, IN4 = 1

u16 receivedata;

void delay(uint z)
{
        uint x,y;
        for(x = z; x > 0; x--)
        for(y = 114; y > 0 ; y--);
}

void UART_INIT()
{
        PCON=0x00;
  SCON=0x50;                                                                                                         
        EA = 1;
        ES = 1;
        TMOD = 0x20;
  TH1 = 0xfd;
        TL1 = 0xfd;

}

/************************************************************************/
/*     void  run(void)        
{
     push_val_left  =pwm;  
         push_val_right =pwm;         
                 if(pwm==10) pwm=0;
                if(pwm==0&&pwm<0) pwm=0;

}*/


/************************************************************************/
/*                    PWMµ÷ÖƵç»úתËÙ                                   */
/************************************************************************/


/*                    ×ó²àµç»úµ÷ËÙ                                        */
/*µ÷½Úpush_val_leftµÄÖµ¸Ä±äµç»úתËÙ,Õ¼¿Õ±È            */
/*                void pwm_out_left_moto(void)
{  
   if(Left_moto_stop)
   {
    if(pwm_val_left<=push_val_left)
             {  
                                 Left_moto_pwm=1;
                   }
        else
              {
                                        Left_moto_pwm=0;
                                }

        if(pwm_val_left>=10)
        pwm_val_left=0;
   }
   else
         {
           Left_moto_pwm=0;      
         }
}*/
/******************************************************************/
/*                    ÓÒ²àµç»úµ÷ËÙ                                  */  
/*  void pwm_out_right_moto(void)
{
  if(Right_moto_stop)
   {
    if(pwm_val_right<=push_val_right)
             {  
                                 Right_moto_pwm=1;
             }  
        else
              {
                                         Right_moto_pwm=0;
                    }
        if(pwm_val_right>=10)
            pwm_val_right=0;
   }
   else    {Right_moto_pwm=0;        }
}
/***************************************************/

/*        void timer0()interrupt 1   using 2
{
   TH0=0XF8;         
         TL0=0X30;
         time++;
         pwm_val_left++;
         pwm_val_right++;
         pwm_out_left_moto();
         pwm_out_right_moto();
}*/


void forward()
{
        

        left_motor_go;
        right_motor_go;
      
}

void left_go()           
{
        
        
        left_motor_back;
        right_motor_go;
      
        delay(700);
        forward();
}

void right_go()
{
        
        
        delay(50);
        right_motor_back;
        left_motor_go;

        delay(700);
        forward();
}

void left()
{

        
        delay(50);
        right_motor_go;                  
        left_motor_back;        
      
}


void right()
{
        

        left_motor_go;
        right_motor_back;  
      
}


void back()
{
        
        
        left_motor_back;
        right_motor_back;      

}


void stop()
{
        
        IN1=0;
        IN2=0;
        IN3=0;
        IN4=0;
      
}

  

void main()
{
          IN1=0;IN2=0;IN3=0;IN4=0;
          UART_INIT();
                switch(receivedata)
                {
                        case 'g': forward(); break;
                        case 'b': back(); break;
                        case 'l': left(); break;
                        case 'r': right(); break;
                        case 's': stop(); break;
                        case 'z': left_go(); break;
                         case 'y': right_go(); break;


                }
}


void UART_SER() interrupt 4
{
  receivedata=SBUF;
        RI=0;
        SBUF=receivedata;
        while(!TI);
        TI=0;
}
回复

使用道具 举报

板凳
ID:130231 发表于 2020-5-25 12:02 | 只看该作者
你可用串口助手,在电脑端连接蓝牙测试,在试机。先测出APP发出的字符,电脑端能不能收到。如果能收到,在一一对应程序中字符。还有的是波特率也要对得上。
回复

使用道具 举报

地板
ID:687146 发表于 2020-5-25 12:51 | 只看该作者
main函数里没循环,switch跳出一次程序就结束了后续单片机一直执行终断,根本进不去switch,把switch丢终断里因该就可以了,再不行把字母换成16进制的数字。
回复

使用道具 举报

5#
ID:487151 发表于 2020-5-25 13:28 | 只看该作者
可用串口助手,在电脑端连接蓝牙测试,在试机。先测出APP发出的字符,电脑端能不能收到。如果能收到,在一一对应程序中字符。还有的是波特率也要对得上。
回复

使用道具 举报

6#
ID:711376 发表于 2020-5-25 14:47 | 只看该作者
zqy181818 发表于 2020-5-25 12:02
你可用串口助手,在电脑端连接蓝牙测试,在试机。先测出APP发出的字符,电脑端能不能收到。如果能收到,在 ...

现在是电脑上的串口助手能控制小车,但是只有一个电机转,手机App还是没法控制
回复

使用道具 举报

7#
ID:711376 发表于 2020-5-25 14:59 | 只看该作者
2538076292 发表于 2020-5-25 12:51
main函数里没循环,switch跳出一次程序就结束了后续单片机一直执行终断,根本进不去switch,把switch丢终断 ...

我刚开始就是给放到中断服务函数中了,现在用电脑串口助手能控制,但是只有一个电机转不知道是什么情况,我上午已经调过驱动,两个电机都是可以正常运动的,现在的问题就是只有左轮是转的,而且手机APP和单片机之间的通信还是有问题。
回复

使用道具 举报

8#
ID:687146 发表于 2020-5-25 17:38 | 只看该作者
嘿嘿嘿a 发表于 2020-5-25 14:59
我刚开始就是给放到中断服务函数中了,现在用电脑串口助手能控制,但是只有一个电机转不知道是什么情况, ...

单独调试一下驱动模块,在main函数里只加上驱动函数,在设定好延时,做个循环看看电机转动是否正常。
回复

使用道具 举报

9#
ID:711376 发表于 2020-5-25 20:11 | 只看该作者
2538076292 发表于 2020-5-25 17:38
单独调试一下驱动模块,在main函数里只加上驱动函数,在设定好延时,做个循环看看电机转动是否正常。

今天上午就搞过了,电机可以正常运作,然后现在电脑上的串口助手可以驱动小车运动了,但是手机APP和蓝牙模块之间的通信还是没法建立,不知道是哪个地方的原因。。。
回复

使用道具 举报

10#
ID:426480 发表于 2020-5-26 15:16 | 只看该作者
目前经过你的描述可以判断出,你的51程序正常!串口正常!现需要检查APP和蓝牙模块通讯的问题,第一:判断手机APP蓝牙是否支持、打开,开始搜索、配对、然后进行连接。第二:如果第一步成功接着判断是否手机蓝牙发送消息正常。重点:检查手机APP蓝牙连接配对,及消息发送接收程序的编写。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表