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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4903|回復: 3
打印 上一主題 下一主題
收起左側

智能小車和手機藍牙連接 按鍵按超過幾次后,小車失控

[復制鏈接]
跳轉到指定樓層
樓主
ID:163950 發表于 2017-4-20 10:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
//描述本人制作此小車和手機藍牙連接后每次開始都能正常前后左右,但按超過幾次后,小車失控,再按就一直前進或后退! 請大家看看程序有問題嗎? 藍牙模塊沒有接錯線!!模塊用串口調試也是好的,每次都能正常接收,大家看看有什么問題,請指教

  1. /****************************************************************************
  2.          硬件連接
  3.          藍牙有4條線定義:
  4.           VCC
  5.       GND
  6.           TDX
  7.           RXD
  8.          把藍牙插入單片機J7接口中         --注意不要接錯線,否則燒壞藍牙模塊,不保修,不換貨。

  9. 端口模式配置

  10. PXM1     PXM0           模式

  11. 0                  0                  準雙向口
  12. 0                  1                  強推挽輸出
  13. 1                  0                  高阻輸入
  14. 1                  1                  開漏輸出
  15. ******************************************************************/  


  16. /*************        功能說明        **************

  17. 串口1全雙工中斷方式收發通訊程序。本例程使用11.0592MHZ時鐘,如要改變,請修改下面的"定義主時鐘"的值并重新編譯。

  18. 串口設置為:9600,8,n,1.

  19. ******************************************/

  20. /*************        本地常量聲明        **************/
  21. #define MAIN_Fosc                11059200L        //定義主時鐘
  22. #define        RX1_Lenth                32                        //串口接收緩沖長度
  23. #define        BaudRate1                9600UL            //選擇波特率


  24. #define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 1 重裝值, 對應300KHZ
  25. #define        Timer2_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 2 重裝值, 對應300KHZ


  26. #define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 1 重裝值, 對應300KHZ
  27. #define        Timer2_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 2 重裝值, 對應300KHZ

  28. #include        "STC15Fxxxx.H"


  29. //char code str[] =  "收到指令,向前!\n";
  30. //char code str1[] = "收到指令,向后!\n";
  31. //char code str2[] = "收到指令,向左!\n";
  32. //char code str3[] = "收到指令,向右!\n";
  33. //char code str4[] = "收到指令,停止!\n";

  34. bit  flag_REC=0;   
  35. bit  flag    =0; //標志位清零
  36.         
  37. #define left     'C'
  38. #define right    'D'
  39. #define up       'A'
  40. #define down     'B'
  41. #define stop     'F'

  42. unsigned char  i=0;
  43. unsigned char  dat=0;
  44. unsigned char  buff[5]=0; //接收緩沖字節

  45. sbit M1A=P1^0;                            //定義左側電機驅動A端
  46. sbit M1B=P1^1;                            //定義左側電機驅動B端

  47. sbit M2A=P1^2;                            //定義右側電機驅動A端
  48. sbit M2B=P1^3;                            //定義右側電機驅動B端

  49. /*************        本地變量聲明        **************/
  50. u8        idata RX1_Buffer[RX1_Lenth];        //接收緩沖
  51. u8        TX1_Cnt;        //發送計數
  52. u8        RX1_Cnt;        //接收計數
  53. bit        B_TX1_Busy;        //發送忙標志


  54. void tingzhi()
  55. {
  56.    M1A=0;                                   //將M1電機A端初始化為0
  57.    M1B=0;                                   //將M1電機B端初始化為0
  58.    M2A=0;                                   //將M2電機A端初始化為0
  59.    M2B=0;

  60. }

  61. void qianjin()
  62. {
  63.    M1A=1;                                   
  64.    M1B=0;                                   
  65.    M2A=1;                                   
  66.    M2B=0;
  67. }

  68. void houtui()
  69. {
  70.    M1A=0;                                   
  71.    M1B=1;                                   
  72.    M2A=0;                                   
  73.    M2B=1;
  74. }

  75. void zuozhuan()
  76. {
  77.    M1A=0;                                   
  78.    M1B=1;                                   
  79.    M2A=1;                                   
  80.    M2B=0;
  81. }

  82. void youzhuan()
  83. {
  84.    M1A=1;                                   
  85.    M1B=0;                                   
  86.    M2A=0;                                   
  87.    M2B=1;
  88. }
  89. //字符串發送函數
  90. /*          void send_str( )
  91.                    // 傳送字串
  92.     {
  93.             unsigned char i = 0;
  94.             while(str[i] != '\0')
  95.            {
  96.                 SBUF = str[i];
  97.                 while(!TI);                                // 等特數據傳送
  98.                 TI = 0;                                        // 清除數據傳送標志
  99.                 i++;                                        // 下一個字符
  100.            }        
  101.     }
  102.         
  103.                   void send_str1( )
  104.                    // 傳送字串
  105.     {
  106.             unsigned char i = 0;
  107.             while(str1[i] != '\0')
  108.            {
  109.                 SBUF = str1[i];
  110.                 while(!TI);                                // 等特數據傳送
  111.                 TI = 0;                                        // 清除數據傳送標志
  112.                 i++;                                        // 下一個字符
  113.            }        
  114.     }        

  115.                           void send_str2( )
  116.                    // 傳送字串
  117.     {
  118.             unsigned char i = 0;
  119.             while(str2[i] != '\0')
  120.            {
  121.                 SBUF = str2[i];
  122.                 while(!TI);                                // 等特數據傳送
  123.                 TI = 0;                                        // 清除數據傳送標志
  124.                 i++;                                        // 下一個字符
  125.            }        
  126.     }        
  127.                     
  128.                           void send_str3()
  129.                    // 傳送字串
  130.     {
  131.             unsigned char i = 0;
  132.             while(str3[i] != '\0')
  133.            {
  134.                 SBUF = str3[i];
  135.                 while(!TI);                                // 等特數據傳送
  136.                 TI = 0;                                        // 清除數據傳送標志
  137.                 i++;                                        // 下一個字符
  138.            }        
  139.     }        

  140.               void send_str4()
  141.                    // 傳送字串
  142.     {
  143.             unsigned char i = 0;
  144.             while(str4[i] != '\0')
  145.            {
  146.                 SBUF = str4[i];
  147.                 while(!TI);                                // 等特數據傳送
  148.                 TI = 0;                                        // 清除數據傳送標志
  149.                 i++;                                        // 下一個字符
  150.            }        
  151.     }*/        
  152.          

  153. /**********************************************/
  154. void main(void)
  155. {
  156.         B_TX1_Busy = 0;
  157.         RX1_Cnt = 0;
  158.         TX1_Cnt = 0;

  159.         S1_8bit();                                //8位數據
  160.         S1_USE_P30P31();                //UART1 使用P30 P31口        默認


  161.         AUXR &= ~(1<<4);        //Timer stop                波特率使用Timer2產生
  162.         AUXR |= 0x01;                //S1 BRT Use Timer2;
  163.         AUXR |=  (1<<2);        //Timer2 set as 1T mode
  164.         TH2 = (u8)(Timer2_Reload >> 8);
  165.         TL2 = (u8)Timer2_Reload;
  166.         AUXR |=  (1<<4);        //Timer run enable

  167.         REN = 1;        //允許接收
  168.         ES  = 1;        //允許中斷

  169.         EA = 1;                //允許全局中斷
  170.         

  171.         while (1)
  172.         {

  173.           P1M1 = 0;
  174.           P1M0 = 0;
  175.          if(flag_REC==1)                                    //
  176.            {
  177.                 flag_REC=0;
  178.                 if(buff[0]=='O'&&buff[1]=='N')        //第一個字節為O,第二個字節為N,第三個字節為控制碼
  179.                 switch(buff[2])
  180.              {
  181.                       case up :                                                    // 前進
  182.                           //send_str( );
  183.                           qianjin();
  184.                           break;

  185.                       case down:                                                // 后退
  186.                           // send_str1( );
  187.                           houtui();
  188.                           break;

  189.                       case left:                                                // 左轉
  190.                            //send_str3( );
  191.                           zuozhuan();
  192.                           break;

  193.                       case right:                                                // 右轉
  194.                          // send_str2( );
  195.                           youzhuan();
  196.                           break;

  197.                       case stop:                                                // 停止
  198.                           //send_str4( );
  199.                           tingzhi();
  200.                           break;

  201.              }

  202.                                          
  203.          }
  204.         }
  205. }

  206. /********************* UART1中斷函數************************/
  207. void UART1_int (void) interrupt UART1_VECTOR
  208. {
  209.         if(RI)        //如果為1接收數據有效 為0未接收到數據
  210.   {
  211.        RI=0;
  212.        dat=SBUF;
  213.        if(dat=='O'&&(i==0)) //接收數據第一幀
  214.          {
  215.             buff[i]=dat;
  216.             flag=1;        //開始接收數據
  217.          }
  218.        else
  219.       if(flag==1)
  220.      {
  221.       i++;
  222.       buff[i]=dat;
  223.       if(i>=2)
  224.       {i=0;flag=0;flag_REC=1 ;}  // 停止接收
  225.      }
  226.          }

  227.         if(TI)
  228.         {
  229.                 TI = 0;
  230.                 B_TX1_Busy = 0;                //清除發送忙標志
  231.         }
  232. }
  233.                            
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:195347 發表于 2017-5-2 22:58 來自手機 | 只看該作者
樓主解決了嗎?我也出現這樣的情況了
回復

使用道具 舉報

板凳
ID:163950 發表于 2017-5-3 08:12 | 只看該作者
現在我懷疑是電源共用了一個電源,電機瞬間停止啟動后造成的電壓不穩定 ,我想買個帶光耦隔離的驅動,把電源分開試試!想了好多天了 ,再試試吧!
回復

使用道具 舉報

地板
ID:163950 發表于 2017-8-11 08:14 | 只看該作者
解決了,就是電源干擾,改用減速電機就可以了 ,或者電源分開獨立!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 爱爱免费视频网站 | 久久精品国产免费看久久精品 | 久久69精品久久久久久久电影好 | 成人久久网| 国产三级一区二区 | 欧美日韩国产一区 | 天天色图 | 1区2区3区视频 | 中文字幕一区二区三区四区五区 | 国产精品久久久久久福利一牛影视 | 欧州一区 | 熟女毛片 | 久久精品小视频 | 亚州激情 | 国产成人精品一区二区三 | 三级黄色网址 | 国产精品免费一区二区 | 九九热精品在线视频 | 中文在线视频观看 | 国产一级一级毛片 | 国产91精品久久久久久久网曝门 | 中文字幕日韩欧美一区二区三区 | 在线免费观看毛片 | 久久人| 久久久这里都是精品 | 亚洲成人av在线播放 | 久精品久久 | 成年人视频在线免费观看 | 免费久久视频 | 97视频网站 | 亚洲日韩中文字幕一区 | 亚洲成人av | 久久噜噜噜精品国产亚洲综合 | 日本不卡视频 | 国产成人jvid在线播放 | 欧洲亚洲视频 | www.色综合| 亚洲国产精品久久久久秋霞不卡 | 精品国产一区二区三区久久久四川 | 97超碰人人草 | 国产福利91精品 |