久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1245|回復(fù): 1
收起左側(cè)

51單片機(jī)超聲波藍(lán)牙小車的藍(lán)牙是用哪個(gè)字符串驅(qū)動(dòng)的?手機(jī)app發(fā)送1沒有反應(yīng) 驅(qū)動(dòng)不了

[復(fù)制鏈接]
ID:964120 發(fā)表于 2021-10-3 18:35 | 顯示全部樓層 |閱讀模式
小車的藍(lán)牙模塊是用哪個(gè)字符串驅(qū)動(dòng)的  手機(jī)app發(fā)送1沒有反應(yīng)   一直驅(qū)動(dòng)不了    超聲波運(yùn)行的時(shí)候總是要重新插一下TRIG

單片機(jī)源程序如下:
  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;           //接舵機(jī)信號(hào)端輸入PWM信號(hào)調(diào)節(jié)速度
  7. sbit  ECHO= P3^3;                                   //超聲波接口定義           
  8. sbit  TRIG= P3^2;                                   //超聲波接口定義
  9. sbit ENB = P2^2;          //左電機(jī)高電平
  10. sbit ENA = P2^3;          //右電機(jī)高電平
  11. sbit IN1 = P2^7;
  12. sbit IN2 = P2^6;          //右電機(jī)
  13. sbit IN3 = P2^5;
  14. sbit IN4 = P2^4;          //左電機(jī)
  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;                  //功能轉(zhuǎn)換按鍵
  21. sbit K2 = P1^6;                  //加速鍵
  22. sbit K3 = P1^7;          //減速鍵
  23. uchar connt;                          //調(diào)速周期
  24. uchar PWM_time;                          //高電平時(shí)間
  25. uchar flag1=0,flag2=0;                          //標(biāo)志位
  26. uchar COM;
  27. uchar pwm_val_left  = 0;//變量定義
  28. uchar push_val_left ;//舵機(jī)歸中,產(chǎn)生約,1.5MS 信號(hào)
  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;                    //時(shí)間變量
  36. uint timer=0;                        //延時(shí)基準(zhǔn)變量


  37.                                        
  38. /************************************************************************/
  39.                  void delay(uint k)          //延時(shí)函數(shù)
  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)          //延時(shí)函數(shù)
  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);                           //松鍵檢測(cè)
  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()                                //前進(jìn)
  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()                                //左大轉(zhuǎn)
  105. {
  106.     IN1 = 0;   
  107.          IN2 = 1;
  108.         IN3 = 1;
  109.         IN4 = 0;
  110. }

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

  118. /************************************************************************/
  119.      void  StartModule()                       //啟動(dòng)測(cè)距信號(hào)
  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)                 //串口中斷初始化函數(shù)
  147. {
  148.     SCON=0x50;                        //設(shè)置為工作方式1
  149.         TMOD=0x20;                        //設(shè)置計(jì)數(shù)器工作方式2
  150.         PCON=0x00;                        //波特率不加倍
  151.         TH1=0xfd;                                //計(jì)數(shù)器初始值設(shè)置,注意波特率是9600的
  152.         TL1=0xfd;
  153.         ES=1;                                                //打開接收中斷
  154.         EA=1;                                                //打開總中斷
  155.         TR1=1;                                        //打開計(jì)數(shù)器
  156.         
  157. }
  158. /***************************************************/
  159.           void Conut(void)                   //計(jì)算距離
  160.         {
  161.           while(!ECHO);                       //當(dāng)RX為零時(shí)等待
  162.           TR1=1;                               //開啟計(jì)數(shù)
  163.           while(ECHO);                           //當(dāng)RX為1計(jì)數(shù)并等待
  164.           TR1=0;                                   //關(guān)閉計(jì)數(shù)
  165.           time=TH1*256+TL1;                   //讀取脈寬長(zhǎng)度
  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;          //舵機(jī)向左轉(zhuǎn)90度
  176.                   timer=0;
  177.                   while(timer<=4000); //延時(shí)400MS讓舵機(jī)轉(zhuǎn)到其位置                 4000
  178.                   StartModule();          //啟動(dòng)超聲波測(cè)距
  179.           Conut();                           //計(jì)算距離
  180.                   S2=S;  

  181.                   push_val_left=5;          //舵機(jī)向右轉(zhuǎn)90度
  182.                   timer=0;
  183.                   while(timer<=4000); //延時(shí)400MS讓舵機(jī)轉(zhuǎn)到其位置
  184.                   StartModule();          //啟動(dòng)超聲波測(cè)距
  185.           Conut();                          //計(jì)算距離
  186.                   S4=S;         
  187.         

  188.                   push_val_left=14;          //舵機(jī)歸中
  189.                   timer=0;
  190.                   while(timer<=4000); //延時(shí)400MS讓舵機(jī)轉(zhuǎn)到其位置

  191.                   StartModule();          //啟動(dòng)超聲波測(cè)距
  192.           Conut();                          //計(jì)算距離
  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();          //車的左邊比車的右邊距離小        右轉(zhuǎn)        
  210.                         timer=0;
  211.                         while(timer<=4000);
  212.                      }                                      
  213.                        else
  214.                      {
  215.                        leftgo();                //車的左邊比車的右邊距離大        左轉(zhuǎn)
  216.                        timer=0;
  217.                        while(timer<=4000);
  218.                      }
  219.                
  220.                                              

  221. }

  222. /************************************************************************/
  223. /*                    PWM調(diào)制舵機(jī)轉(zhuǎn)速                                   */
  224. /************************************************************************/
  225. /*                    舵機(jī)調(diào)速                                        */
  226. /*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比            */
  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()                                  //按鈕控制功能轉(zhuǎn)換
  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中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
  253. void time0()interrupt 1   
  254. {        

  255.      TH0=(65536-100)/256;          //100US定時(shí)
  256.          TL0=(65536-100)%256;
  257.          timer++;                                  //定時(shí)器100US為準(zhǔn)。在這個(gè)基礎(chǔ)上延時(shí)
  258.          pwm_val_left++;
  259.          pwm_Servomoto();

  260.          t++;
  261.          if(t==5)                                                 //PWM調(diào)制左右電機(jī)速度   
  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檢測(cè)啟動(dòng)檢測(cè)一次         1000
  284.            {
  285.                timer=0;
  286.                    StartModule(); //啟動(dòng)檢測(cè)
  287.            Conut();                  //計(jì)算距離
  288.            if(S<=25)                  //距離小于30CM
  289.                    {
  290.                        stop();          //小車停止
  291.                        COMM();                   //方向函數(shù)
  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中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
  319.          void timer1()interrupt 3  
  320. {        
  321.            
  322. }

  323. /***************************************************/
  324. void UARTInterrupt(void) interrupt 4                         //串口中斷函數(shù)
  325. {   
  326.     unsigned char com;
  327.     if(flag1==1)                                                                //判斷能否執(zhí)行
  328.         {
  329.         if(RI==1)
  330.       P1_4=0;                                       
  331.             com=SBUF;                   //暫存接收到的數(shù)據(jù)
  332.             RI=0;
  333.         }

  334.          switch(com)                                                 //接收到字符并要執(zhí)行的功能
  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定時(shí)
  352.         TL0=(65536-100)%256;
  353.         TR0= 1;
  354.         ET0= 1;
  355.         EA = 1;
  356.         connt = 20;                                                 //PWM的一個(gè)周期
  357.     PWM_time = 15;                                         //調(diào)速,數(shù)值越大速度越慢
  358.         delay(100);
  359.         push_val_left=14;   
  360.         while(1)                       /*無(wú)限循環(huán)*/
  361.         {
  362.           shansuo();
  363.           keyspeed();
  364.           keychange();
  365.           switch(COM)                                                 //接收到字符并要執(zhí)行的功能
  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. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:964120 發(fā)表于 2021-10-5 00:08 | 顯示全部樓層
有大佬可以幫幫我嘛
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品乱码久久久久久蜜桃 | 日韩一区在线播放 | 神马久久春色视频 | 天天拍天天草 | 欧美中文字幕在线观看 | 国产精品xxxx | 日韩中文字幕在线观看 | 欧美精品乱码久久久久久按摩 | 久久久久国产成人精品亚洲午夜 | 国产精品成人国产乱一区 | 国产伦精品一区二区 | 久久精品青青大伊人av | 日日做夜夜爽毛片麻豆 | 中文字幕在线观看一区 | 极情综合网 | 国产精品永久免费视频 | 久草资源在线 | 国产精品久久精品 | 麻豆av网站 | 亚洲国产精品久久久久婷婷老年 | 欧美一级精品片在线看 | 久久久国产一区二区三区四区小说 | 色婷婷综合久久久中字幕精品久久 | 亚洲国产成人精品女人久久久 | 九九热最新视频 | 日韩一区二区福利 | 黄色成人国产 | 91精品无人区卡一卡二卡三 | 爱综合 | 日韩免费成人av | 在线视频a | 国产网站在线播放 | 久免费视频 | 久久av一区 | 国产欧美一区二区三区在线看 | 日韩精品一区二区三区在线观看 | 91av在线视频观看 | 亚洲一区 中文字幕 | 小草久久久久久久久爱六 | 精品国产精品国产偷麻豆 | 巨大荫蒂视频欧美另类大 |