找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机超声波蓝牙小车的蓝牙是用哪个字符串驱动的?手机app发送1没有反应 驱动不了

[复制链接]
跳转到指定楼层
楼主
ID:964120 发表于 2021-10-3 18:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小车的蓝牙模块是用哪个字符串驱动的  手机app发送1没有反应   一直驱动不了    超声波运行的时候总是要重新插一下TRIG

单片机源程序如下:
  1. #include<reg52.h>
  2. #include <intrins.h>

  3. typedef unsigned char uchar;
  4. typedef unsigned int  uint;
  5. typedef unsigned long  ulong;

  6. sbit Sevro_moto_pwm = P2^1;           //接舵机信号端输入PWM信号调节速度
  7. sbit  ECHO= P3^3;                                   //超声波接口定义           
  8. sbit  TRIG= P3^2;                                   //超声波接口定义
  9. sbit ENB = P2^2;          //左电机高电平
  10. sbit ENA = P2^3;          //右电机高电平
  11. sbit IN1 = P2^7;
  12. sbit IN2 = P2^6;          //右电机
  13. sbit IN3 = P2^5;
  14. sbit IN4 = P2^4;          //左电机
  15. sbit P1_4=P2^0;           //LED
  16. //sbit A1 = P1^4;                  //左红外避障模块
  17. //sbit A2 = P2^7;                  //右红外避障模块
  18. //sbit A3 = P1^2;                  //左红外寻迹模块
  19. //sbit A4 = P1^3;                  //右红外寻迹模块
  20. sbit K1 = P3^5;                  //功能转换按键
  21. sbit K2 = P1^6;                  //加速键
  22. sbit K3 = P1^7;          //减速键
  23. uchar connt;                          //调速周期
  24. uchar PWM_time;                          //高电平时间
  25. uchar flag1=0,flag2=0;                          //标志位
  26. uchar COM;
  27. uchar pwm_val_left  = 0;//变量定义
  28. uchar push_val_left ;//舵机归中,产生约,1.5MS 信号
  29. uchar non=0,t=0;
  30. ulong S=0;                        //距离变量定义
  31. ulong S1=0;
  32. ulong S2=0;
  33. ulong S3=0;
  34. ulong S4=0;
  35. uint time=0;                    //时间变量
  36. uint timer=0;                        //延时基准变量


  37.                                        
  38. /************************************************************************/
  39.                  void delay(uint k)          //延时函数
  40. {   
  41.      uint x,y;
  42.            for(x=0;x<k;x++)
  43.              for(y=0;y<2000;y++);
  44. }
  45. void delay1(uint j)          //延时函数
  46. {   
  47.      uint x,y;
  48.            for(x=0;x<j;x++)
  49.              for(y=0;y<120;y++);
  50. }
  51. void shansuo()
  52.          {
  53.                  P1_4=1;
  54.                  delay(1);
  55.                  P1_4=0;
  56.                  delay(1);                 
  57.          }
  58. /************************************************************************/
  59. void keyspeed(void)                                 
  60. {
  61.          
  62.          if(K2==0)                                           // 加速
  63.          {
  64.              delay1(10);
  65.                  if(K2==0)
  66.                  {
  67.                     
  68.                          PWM_time--;
  69.                  }
  70.                  while(!K2);                           //松键检测
  71.          }
  72.          if(K3==0)                                           //减速
  73.          {
  74.              delay1(10);
  75.                  if(K3==0)
  76.                  {
  77.                   
  78.                          PWM_time++;
  79.                  }
  80.                  while(!K3);
  81.          }
  82. }
  83. void stop()                                //刹车
  84. {
  85.     IN1 = 0;   
  86.          IN2 = 0;
  87.         IN3 = 0;
  88.         IN4 = 0;
  89. }
  90. void go()                                //前进
  91. {
  92.     IN1 = 1;   
  93.          IN2 = 0;
  94.         IN3 = 1;
  95.         IN4 = 0;
  96. }
  97. void back()                                //后退
  98. {
  99.     IN1 = 0;   
  100.          IN2 = 1;
  101.         IN3 = 0;
  102.         IN4 = 1;
  103. }
  104. void leftgo()                                //左大转
  105. {
  106.     IN1 = 0;   
  107.          IN2 = 1;
  108.         IN3 = 1;
  109.         IN4 = 0;
  110. }

  111. void rightgo()                                //右大转
  112. {
  113.     IN1 = 1;   
  114.          IN2 = 0;
  115.         IN3 = 0;
  116.         IN4 = 1;
  117. }

  118. /************************************************************************/
  119.      void  StartModule()                       //启动测距信号
  120.    {         
  121.           TRIG=1;                                       
  122.           _nop_();
  123.           _nop_();
  124.           _nop_();
  125.           _nop_();
  126.           _nop_();
  127.           _nop_();
  128.           _nop_();
  129.           _nop_();
  130.           _nop_();
  131.           _nop_();
  132.           _nop_();
  133.           _nop_();
  134.           _nop_();
  135.           _nop_();
  136.           _nop_();
  137.           _nop_();
  138.           _nop_();
  139.           _nop_();
  140.           _nop_();
  141.           _nop_();
  142.           _nop_();
  143.           TRIG=0;
  144.          
  145.    }

  146. void InitUART(void)                 //串口中断初始化函数
  147. {
  148.     SCON=0x50;                        //设置为工作方式1
  149.         TMOD=0x20;                        //设置计数器工作方式2
  150.         PCON=0x00;                        //波特率不加倍
  151.         TH1=0xfd;                                //计数器初始值设置,注意波特率是9600的
  152.         TL1=0xfd;
  153.         ES=1;                                                //打开接收中断
  154.         EA=1;                                                //打开总中断
  155.         TR1=1;                                        //打开计数器
  156.         
  157. }
  158. /***************************************************/
  159.           void Conut(void)                   //计算距离
  160.         {
  161.           while(!ECHO);                       //当RX为零时等待
  162.           TR1=1;                               //开启计数
  163.           while(ECHO);                           //当RX为1计数并等待
  164.           TR1=0;                                   //关闭计数
  165.           time=TH1*256+TL1;                   //读取脉宽长度
  166.           TH1=0;
  167.           TL1=0;
  168.           S=(time*1.7)/100;        //算出来是CM
  169.          
  170.         }

  171. /************************************************************************/
  172. void  COMM( void )                       
  173.   {
  174.                
  175.                   push_val_left=23;          //舵机向左转90度
  176.                   timer=0;
  177.                   while(timer<=4000); //延时400MS让舵机转到其位置                 4000
  178.                   StartModule();          //启动超声波测距
  179.           Conut();                           //计算距离
  180.                   S2=S;  

  181.                   push_val_left=5;          //舵机向右转90度
  182.                   timer=0;
  183.                   while(timer<=4000); //延时400MS让舵机转到其位置
  184.                   StartModule();          //启动超声波测距
  185.           Conut();                          //计算距离
  186.                   S4=S;         
  187.         

  188.                   push_val_left=14;          //舵机归中
  189.                   timer=0;
  190.                   while(timer<=4000); //延时400MS让舵机转到其位置

  191.                   StartModule();          //启动超声波测距
  192.           Conut();                          //计算距离
  193.                   S1=S;         

  194.           if((S2<50)||(S4<50)||(S1<50)) //只要左右各有距离小于,20CM小车后退
  195.                   {
  196.                   back();                   //后退
  197.                   timer=0;
  198.                   while(timer<=4000);
  199.                   }
  200.                   if((S2<50)&&(S4<50)&&(S1<50)) //只要左右各有距离小于,20CM小车后退
  201.                   {
  202.                   back();                   //后退
  203.                   timer=0;
  204.                   while(timer<=4000);
  205.                   }
  206.                   
  207.                   if(S2>S4)                 
  208.                      {
  209.                                 rightgo();          //车的左边比车的右边距离小        右转        
  210.                         timer=0;
  211.                         while(timer<=4000);
  212.                      }                                      
  213.                        else
  214.                      {
  215.                        leftgo();                //车的左边比车的右边距离大        左转
  216.                        timer=0;
  217.                        while(timer<=4000);
  218.                      }
  219.                
  220.                                              

  221. }

  222. /************************************************************************/
  223. /*                    PWM调制舵机转速                                   */
  224. /************************************************************************/
  225. /*                    舵机调速                                        */
  226. /*调节push_val_left的值改变电机转速,占空比            */
  227. void pwm_Servomoto(void)
  228. {  

  229.     if(pwm_val_left <= push_val_left)
  230.                Sevro_moto_pwm=1;
  231.         else
  232.                Sevro_moto_pwm=0;
  233.         if(pwm_val_left>=100)
  234.         pwm_val_left=0;

  235. }
  236. void keychange()                                  //按钮控制功能转换
  237. {
  238.      COM=0;
  239.          if(K1==0)
  240.          {
  241.              delay1(10);
  242.                  if(K1==0)
  243.                  {
  244.                      COM++;
  245.                  }
  246.                  while(!K1);   
  247.          }
  248.          if(COM==4)
  249.          COM=0;

  250. }

  251. /***************************************************/
  252. ///*TIMER1中断服务子函数产生PWM信号*/
  253. void time0()interrupt 1   
  254. {        

  255.      TH0=(65536-100)/256;          //100US定时
  256.          TL0=(65536-100)%256;
  257.          timer++;                                  //定时器100US为准。在这个基础上延时
  258.          pwm_val_left++;
  259.          pwm_Servomoto();

  260.          t++;
  261.          if(t==5)                                                 //PWM调制左右电机速度   
  262.          {
  263.              t=0;
  264.                  non++;
  265.          }
  266.          if( non == PWM_time )                                 
  267.     {
  268.              ENA = 1;
  269.          ENB = 1;
  270.     }
  271.     if( non == connt )
  272.     {
  273.              non = 0;
  274.          if( PWM_time != 0)
  275.         {
  276.              ENA = 0;
  277.              ENB = 0;
  278.         }
  279.     }
  280. }

  281. void bizhang()                                                //避障功能
  282. {  
  283.       if(timer>=1000)          //100MS检测启动检测一次         1000
  284.            {
  285.                timer=0;
  286.                    StartModule(); //启动检测
  287.            Conut();                  //计算距离
  288.            if(S<=25)                  //距离小于30CM
  289.                    {
  290.                        stop();          //小车停止
  291.                        COMM();                   //方向函数
  292.                    }
  293.                    else
  294.                    if(S>25)                  //距离大于,30CM往前走
  295.                    go();
  296. //                   if(!A1)
  297. //                   {
  298. //                       SC();
  299. //                           delay1(20);
  300. //                           HT();
  301. //                           delay1(300);
  302. //                           SC();
  303. //                           COMM();
  304. //                   }
  305. //                   if(!A2)
  306. //                   {
  307. //                       SC();
  308. //                           delay1(20);
  309. //                           HT();
  310. //                           delay1(300);
  311. //                           SC();
  312. //                           COMM();
  313. //                   }                  
  314.            }                                             
  315.          
  316. }
  317. /***************************************************/
  318. ///*TIMER0中断服务子函数产生PWM信号*/
  319.          void timer1()interrupt 3  
  320. {        
  321.            
  322. }

  323. /***************************************************/
  324. void UARTInterrupt(void) interrupt 4                         //串口中断函数
  325. {   
  326.     unsigned char com;
  327.     if(flag1==1)                                                                //判断能否执行
  328.         {
  329.         if(RI==1)
  330.       P1_4=0;                                       
  331.             com=SBUF;                   //暂存接收到的数据
  332.             RI=0;
  333.         }

  334.          switch(com)                                                 //接收到字符并要执行的功能
  335.         {
  336.             case 1: go();break;
  337.             case 2: stop();break;
  338.             case 3: leftgo();break;
  339.             case 4: rightgo();break;
  340.                 case 5: back();break;
  341.                 case 6:        PWM_time--;break;
  342.                 case 7:        PWM_time++;break;
  343.         }                        
  344.         
  345. }

  346.         void main(void)
  347. {
  348.            
  349.     IP=0x10;
  350.         TMOD=0X11;
  351.         TH0=(65536-100)/256;          //100US定时
  352.         TL0=(65536-100)%256;
  353.         TR0= 1;
  354.         ET0= 1;
  355.         EA = 1;
  356.         connt = 20;                                                 //PWM的一个周期
  357.     PWM_time = 15;                                         //调速,数值越大速度越慢
  358.         delay(100);
  359.         push_val_left=14;   
  360.         while(1)                       /*无限循环*/
  361.         {
  362.           shansuo();
  363.           keyspeed();
  364.           keychange();
  365.           switch(COM)                                                 //接收到字符并要执行的功能
  366.         {            
  367.             case 0:TH1=0;TL1=0;ET1= 1; bizhang();break;                                
  368.             case 1:stop();InitUART();ET1= 0;flag1=1;while(1);break;
  369.                 default:break;
  370.         }                                                         
  371.         }  
  372. }
复制代码


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

使用道具 举报

沙发
ID:964120 发表于 2021-10-5 00:08 | 只看该作者
有大佬可以帮帮我嘛
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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