• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

蓝牙方案是不是什么电子都用的上?

zhongyitengda 2017-01-16 浏览量:1226
看别人做了好多机器什么好玩的,我也想做,就是不知道办
1 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 这是我以前做的循迹车里面放了蓝牙的程序。这个挺好用。还有相应的安卓APP如果感兴趣可以联系我。我发一些资料给你~~


    #include<AT89x51.H>


    //HL-1小车驱动接线定义
        #define Left_moto_go      {P0_0=1,P0_1=0;}    //左边电机向前走
    #define Left_moto_back    {P0_0=0,P0_1=1;}    //左边电机向后转
    #define Left_moto_Stop    {P0_0=0,P0_1=0;}    //左边电机停转                     
    #define Right_moto_go     {P0_2=1,P0_3=0;} //右边电机向前走
    #define Right_moto_back   {P0_2=0,P0_3=1;} //右边电机向后走
    #define Right_moto_Stop   {P0_2=0,P0_3=0;} //右边电机停转   

    #define left     'C'
        #define right    'D'
    #define up       'A'
        #define down     'B'
    #define stop     'F'

    #define uint    unsigned int                          //重定义无符号整数类型
        #define uchar   unsigned char                         //重定义无符号字符类型

    char code str[] =  "收到指令,向前!\n";
    char code str1[] = "收到指令,向后!\n";
    char code str2[] = "收到指令,向左!\n";
    char code str3[] = "收到指令,向右!\n";
    char code str4[] = "收到指令,停止!\n";

    bit  flag_REC=0; 
    bit  flag    =0;  


    unsigned char  i=0;
    unsigned char  dat=0;
        unsigned char  buff[5]=0; //接收缓冲字节
    uchar code  LedShowData[]={0x03,0x9F,0x25,0x0D,0x99,  //定义数码管显示数据
                                0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9

    #define ShowPort P2                                   //定义数码管显示端口
       
    /************************************************************************/
    //延时函数
       void delay(unsigned int k)
    {    
         unsigned int x,y;
    for(x=0;x<k;x++) 
      for(y=0;y<2000;y++);
    }

    /************************************************************************/
    //字符串发送函数
     void send_str( )
                       // 传送字串
        {
       unsigned char i = 0;
       while(str[i] != '\0')
      {
    SBUF = str[i];
    while(!TI); // 等特数据传送
    TI = 0; // 清除数据传送标志
    i++; // 下一个字符
      }
        }

     void send_str1( )
                       // 传送字串
        {
       unsigned char i = 0;
       while(str1[i] != '\0')
      {
    SBUF = str1[i];
    while(!TI); // 等特数据传送
    TI = 0; // 清除数据传送标志
    i++; // 下一个字符
      }
        }

     void send_str2( )
                       // 传送字串
        {
       unsigned char i = 0;
       while(str2[i] != '\0')
      {
    SBUF = str2[i];
    while(!TI); // 等特数据传送
    TI = 0; // 清除数据传送标志
    i++; // 下一个字符
      }
        }
       
     void send_str3()
                       // 传送字串
        {
       unsigned char i = 0;
       while(str3[i] != '\0')
      {
    SBUF = str3[i];
    while(!TI); // 等特数据传送
    TI = 0; // 清除数据传送标志
    i++; // 下一个字符
      }
        }

         void send_str4()
                       // 传送字串
        {
       unsigned char i = 0;
       while(str4[i] != '\0')
      {
    SBUF = str4[i];
    while(!TI); // 等特数据传送
    TI = 0; // 清除数据传送标志
    i++; // 下一个字符
      }
        }
       
       
    /************************************************************************/
    //前速前进
         void  run(void)
    {
        
    Left_moto_go ;   //左电机往前走
    Right_moto_go ;  //右电机往前走
    }

    //前速后退
         void  backrun(void)
    {
        
    Left_moto_back ;   //左电机往后走
    Right_moto_back ;  //右电机往后走
    }

    //左转
         void  leftrun(void)
    {
        

     Left_moto_go ;   //左电机往前走
    Right_moto_back ;  //右电机往后走
    }

    //右转
         void  rightrun(void)
    {
        
     
    Left_moto_back ;   //左电机往前走
    Right_moto_go ;  //右电机往前走
    }
    //STOP
         void  stoprun(void)
    {
        
    Left_moto_Stop ;   //左电机往前走
    Right_moto_Stop ;  //右电机往前走
    }
    /************************************************************************/
    void sint() interrupt 4  //中断接收3个字节

     
        if(RI)                 //是否接收中断
        {
           RI=0;
           dat=SBUF;
           if(dat=='O'&&(i==0)) //接收数据第一帧
             {
                buff[i]=dat;
                flag=1;        //开始接收数据
             }
           else
          if(flag==1)
         {
          i++;
          buff[i]=dat;
          if(i>=2)
          {i=0;flag=0;flag_REC=1 ;}  // 停止接收
         }
    }
    }
    /*********************************************************************/  
    /*--主函数--*/
    void main(void)
    {
    TMOD=0x20;  
        TH1=0xFd;     //11.0592M晶振,9600波特率
        TL1=0xFd;
        SCON=0x50;  
        PCON=0x00; 
        TR1=1;
    ES=1;   
        EA=1;   
     
    while(1) /*无限循环*/

     if(flag_REC==1)    //
      {
    flag_REC=0;
    if(buff[0]=='O'&&buff[1]=='N') //第一个字节为O,第二个字节为N,第三个字节为控制码
    switch(buff[2])
        {
         case up :    // 前进
     send_str( );
     run();
     ShowPort=LedShowData[1]; 
     break;
         case down: // 后退
      send_str1( );
     backrun();
     ShowPort=LedShowData[2]; 
     break;
         case left: // 左转
      send_str3( );
     leftrun();
     ShowPort=LedShowData[3];  
     break;
         case right: // 右转
     send_str2( );
     rightrun();
     ShowPort=LedShowData[4];
     break;
         case stop: // 停止
      send_str4( );
     stoprun();
     ShowPort=LedShowData[0];
     break;

        }
          
     
    }
    }
    }
    • 发布于 2017-01-16
    • 举报
    • 评论 0
    • 2
    • 0

其他答案 数量:6

  • 未必唷,要看方案設計的距離需求,短距離是可行的

    長距離應該還是選Wifi,且Wifi可以接入雲端能做的事情還是比較多

    先考慮您要做什麼方案? 需求是什麼?

    再來選開發板跟藍牙模塊選型

    以上希望對您有用


    • 发布于2017-01-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 好奇是没有错的,但是,蓝牙有很多短板,比如要对接,速率不够等等,这导致不是什么电子都用的上。

    但是,基本上不是以数据通信为目的的短距离无线连接,并且实时性要求不高,蓝牙还是很推荐的。


    建议,玩就玩精,不要人家会的你也会,人家不会你也不会,玩就玩别人不会的。不建议去用现成模块。自己用蓝牙SOC。SOC永远比模块+MCU好!

    • 发布于2017-01-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 先看看自己有什么样子的基础,如果什么都不会的,高楼不会平地起,基础很重要,你得先学点c语言,还要了解什么是单片机,了解51的原理,然后找个板子,自己写段代码,让程序在硬件上跑起来,然后通过自己的硬件设计,然后可以做点自己想要的机器人了


    • 发布于2017-01-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是根据需要的

    有很多不用蓝牙的。

    有的用,还有的用wifi

    根据具体情况来吧

    • 发布于2017-01-16
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

蓝牙方案是不是什么电子都用的上?