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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機掃地機器人程序有問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:391877 發表于 2018-10-24 23:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請求大佬幫忙看一下程序 程序廢真的整不出來
我想的是這個小車可以直接用藍牙遙控(用手機app操控)著走動 也可以按一下app上一個按鍵(參考程序的case5)可以自動清掃 加了驅動 最小系統 避障模塊 就是程序整不了了 希望大佬們幫忙看一下 代碼沒有寫完 如下:
  1. #include<reg52.h>
  2. typedef unsigned int uint;
  3. typedef unsigned char uchar;

  4. sbit ZA1A=P1^0;
  5. sbit ZA1B=P1^1;
  6. sbit ZB1A=P1^2;
  7. sbit ZB1B=P1^3;
  8. sbit YA1A=P1^4;
  9. sbit YA1B=P1^5;
  10. sbit YB1A=P1^6;
  11. sbit YB1B=P1^7;
  12. sbit Trig = P3^2 ;
  13. sbit Echo = P3^3 ;



  14. uchar rev=0; //藍牙接收緩存值
  15. bit rok=0;        //接收標志
  16. /********************************************************************
  17. * 名稱 :qianjin()
  18. * 功能 : 電機1、2啟動,都是前進,整車表現為前進。
  19. * 輸入 : 無
  20. * 輸出 : 無                                                                       
  21. ***********************************************************************/
  22. void qianjin(){
  23.      ZA1A=0;
  24.          ZA1B=1;
  25.          ZB1A=0;
  26.      ZB1B=1;
  27.      YA1A=0;
  28.      YA1B=1;
  29.      YB1A=0;
  30.      YB1B=1;
  31. }
  32. void houtui(){
  33.          ZA1A=1;
  34.          ZA1B=0;
  35.          ZB1A=1;
  36.      ZB1B=0;
  37.      YA1A=1;
  38.      YA1B=0;
  39.      YB1A=1;
  40.      YB1B=0;
  41. }
  42. void zuozhuan(){
  43.          ZA1A=1;
  44.          ZA1B=0;
  45.          ZB1A=1;
  46.      ZB1B=0;
  47.      YA1A=0;
  48.      YA1B=1;
  49.      YB1A=0;
  50.      YB1B=1;
  51. }
  52. void youzhuan(){
  53.          ZA1A=0;
  54.          ZA1B=1;
  55.          ZB1A=0;
  56.      ZB1B=1;
  57.      YA1A=1;
  58.      YA1B=0;
  59.      YB1A=1;
  60.      YB1B=0;
  61. }

  62. void tingche(){
  63.             ZA1A=0;
  64.          ZA1B=0;
  65.          ZB1A=0;
  66.      ZB1B=0;
  67.      YA1A=0;
  68.      YA1B=0;
  69.      YB1A=0;
  70.      YB1B=0;
  71. }

  72. void chaoshengbo ()
  73. {
  74.     TR0=0;           //定時器開關
  75.         TH0=0;
  76.         TL0=0;

  77.     Trig=0;
  78.            Echo=0;
  79.         Trig=1;
  80.         DelayUs2x(20);
  81.         Trig=0;
  82.         while(Echo==0); //等待Echo回波引腳變高電平
  83.         TR0=1;           //定時器0開關打開
  84.         while(Echo); //等待
  85.         time=TH0*256+TL0; //*256是16位計數器的高8位和低八位之分.恢復成16位數的時候要*256。讀取脈寬長度
  86.         S=time*0.0172;  //(厘米)*0.0172,根據超聲的聲速,單片機的頻率,得出來的一個系數.
  87.         if(S>400)S=400;
  88.   }

  89. void bizhang()                                                //避障功能
  90. {  
  91.       
  92.            if(S<=10)                  //距離小于15CM
  93.                    {
  94.                        tingche();          //小車停止
  95.                                            zuozhuan();
  96.                                            delay(1000);
  97.                                            chaoshengbo();
  98.                                            szuo=s;
  99.                                            youzhuan(2000);
  100.                                            chaoshengbo();
  101.                                            syou=s;
  102.                                            zuozhuan(1000);
  103.                                            if(szuo>=syou){
  104.                                               zuozhuan();
  105.                                                   delay(2000);
  106.                                                   else if(szuo<syou){
  107.                                                          youzhuan();
  108.                                                                  delay(2000);
  109.                                                   }
  110.                                            }
  111.                    }
  112.                    else if(S>15)                  //距離大于,30CM往前走
  113.                    qianjin();
  114.                           
  115.            }                     

  116. void suiyuanqingsao(){
  117. qianjin();
  118. }


  119. }

  120. void COMM( void ) //到達某一位置后左右前后測距判斷應該怎么走
  121. {
  122. chaoshengbo();//超聲波測距如果還可以直行則直行,不能直行的話判斷應該左轉還是右轉
  123. {if(s>5){
  124. qianjin();
  125. delay(500);
  126. zuoyouzhuanceju();
  127. }
  128. else if(){
  129. tingche();
  130. zuoyouzhaunceju();
  131. }
  132. }
  133. void zuoyouzhuanceju()
  134. {tingche();
  135. zuozhuan();
  136. delay(1000);//需要計算時間
  137. chaoshengbo(); //啟動超聲波測距
  138. S2=S;
  139. youzhuan();//小車向右轉180度
  140. delay(2000);
  141. chaoshengbo(); //啟動超聲波測距
  142. S4=S;
  143. zuozhuan();//測完距離后讓小車回到原前進方向
  144. delay(1000);
  145. chaoshengbo() //啟動超聲波測距
  146. S1=S;
  147. if((S2<15)||(S4<15)) //只要左右各有距離小于15CM小車后退
  148. {
  149. houtui(); //后退
  150. }

  151. if(S2>S4)
  152. {
  153. youzhuan(); //車的左邊比車的右邊距離小 右轉
  154. delay(1000);
  155. }
  156. else
  157. {
  158. zuozhuan(); //車的左邊比車的右邊距離大 左轉
  159. delay(1000);
  160. }
  161. }

  162. /********************************************************************
  163. * 名稱 : Com_Init()
  164. * 功能 : 串口初始化,晶振11.0592,波特率9600,使串口中斷
  165. * 輸入 : 無
  166. * 輸出 : 無
  167. ***********************************************************************/
  168. void Com_Init(void)
  169. {
  170.         TMOD = 0x20;
  171.         PCON = 0x00;
  172.         SCON = 0x50; //0101 000設置串行口控制寄存器sm0,sm1為01,即為工作方式1
  173.         TH1 = 0xFd; //設置波特率 9600
  174.         TL1 = 0xFd;
  175.         TR1 = 1; //啟動定時器1
  176.         ES = 1; //開串口中斷
  177.         EA = 1; //開總中斷
  178. }

  179. void gongneng()
  180. {
  181.   switch(rev)
  182.                 {
  183.                         case '0': tingche(); break;
  184.                         case '1': qianjin(); break;
  185.                         case '2': houtui(); break;
  186.                         case '3': zuozhuan(); break;
  187.                         case '4': youzhuan(); break;
  188.             case ’5’:suiyuanqingsao();break;
  189.                         default:break;
  190.                 }
  191.   rok=0;
  192. }

  193. void main()
  194. {
  195.     Com_Init();//初始化                                                                                       
  196.     while(1)//循環結構,選擇函數控制小車的狀態
  197.         {
  198.           if(rok)gongneng();
  199.         }
  200. }
  201. /********************************************************************
  202. * 名稱 : Com_Int()
  203. * 功能 : 串口中斷子函數
  204. * 輸入 : 無
  205. * 輸出 : 無
  206. ***********************************************************************/
  207. void Com_Int(void) interrupt 4
  208. {
  209.         ES = 0;
  210.         if(RI) //當硬件接收到一個數據時,RI會置位
  211.                 {
  212.                 rev=SBUF;
  213.                 RI = 0;//取消本次中斷申請,方便進入下一次
  214.                 rok=1;
  215.                 }
  216.         ES = 1;               
  217. }
復制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:547750 發表于 2019-5-26 18:52 | 只看該作者
你好   請問你這個硬件設計里有幾個電機啊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品伊人 | 欧美激情视频网站 | 影音先锋男 | 北条麻妃一区二区三区在线观看 | 国产精品污www一区二区三区 | 99久久99热这里只有精品 | 欧美自拍视频 | 福利影院在线看 | 美女一级a毛片免费观看97 | 91在线综合| 日本精品一区二区三区在线观看视频 | 99re国产精品| 夜夜夜久久久 | 精品国产免费一区二区三区五区 | 久精品久久 | 欧美专区在线 | 中文字幕一区二区三区不卡在线 | 亚洲国产精品自拍 | 亚洲伊人a | 欧美日韩在线免费 | 久久91精品国产一区二区三区 | 亚洲黄色成人网 | 在线视频亚洲 | 中文字幕av一区二区三区 | 密乳av| 91欧美精品成人综合在线观看 | 国产黄色大片在线观看 | 91色在线 | 国产精品久久久久久av公交车 | 一级做a爰片性色毛片16美国 | 久久中文字幕一区 | 黄色免费网址大全 | 午夜免费影视 | 69福利影院 | 在线观看视频中文字幕 | 国产一区二区三区在线看 | 性高湖久久久久久久久 | 欧美三级久久久 | 日韩欧美国产一区二区 | 日韩欧美在线视频 | 久久国产亚洲 |