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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2136|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

自制的藍(lán)牙避障小車(chē)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:576900 發(fā)表于 2020-8-14 16:17 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
代碼測(cè)試
  1. #include<reg51.h>
  2. #define uInt unsigned int
  3. #define A judgefollow=1
  4. #define B judgelefta=1;judgerighta=1
  5. #define C judgerightb=1;judgeleftb=1
  6. sbit switchfollow = P1^7;        //人體紅外感應(yīng)開(kāi)關(guān)
  7. sbit switchredlight = P3^0;        //紅外對(duì)管開(kāi)關(guān)
  8. sbit switchfeellight = P3^1;        //光敏電阻開(kāi)關(guān)
  9. sbit judgefollow = P1^6;         //人體紅外感應(yīng)
  10. sbit judgelefta = P1^4;              //左邊紅外對(duì)管
  11. sbit judgeleftb = P1^5;              //左邊光敏電阻
  12. sbit judgerighta = P3^6;      //右邊紅外對(duì)管
  13. sbit judgerightb = P3^7;      //右邊光敏電阻
  14. sbit in1 = P1^0;
  15. sbit in2 = P1^1;
  16. sbit in3 = P1^2;
  17. sbit in4 = P1^3;
  18. void DelayMS(uInt ValMS)
  19. {
  20.         uInt uiVal,ujVal;
  21.         for(uiVal=0;uiVal<ValMS;uiVal++)
  22.         for(ujVal=0;ujVal<113;ujVal++);
  23. }                           //延時(shí)函數(shù)
  24. void advance()           //前進(jìn)
  25. {
  26.         in1 = 1;
  27.         in2 = 0;
  28.         in3 = 1;
  29.         in4 = 0;        
  30. }
  31. void back()                     //后退
  32. {
  33.         in1 = 0;
  34.         in2 = 1;
  35.         in3 = 0;
  36.         in4 = 1;
  37. }
  38. void right()                //右轉(zhuǎn)
  39. {
  40.         in1 = 1;
  41.         in2 = 0;        //左輪向前
  42.         in3 = 0;        //右輪向后
  43.         in4 = 1;
  44. }
  45. void left()                                //左轉(zhuǎn)
  46. {
  47.         in1 = 0;
  48.         in2 = 1;         //左輪向后
  49.         in3 = 1;         //右輪向前
  50.         in4 = 0;
  51. }
  52. void follow()
  53. {
  54.              //開(kāi)始將所有感應(yīng)接口都變?yōu)?   
  55.         if(judgefollow==0)    //再次確認(rèn)感應(yīng)
  56.         {   
  57.                 left();               
  58.                 DelayMS(1000);        //左轉(zhuǎn)尋找感應(yīng)
  59.                 if(judgefollow==1)   //發(fā)現(xiàn)感應(yīng)
  60.                 {
  61.                         advance();           //前進(jìn)
  62.                 }
  63.                 else                        //左轉(zhuǎn)未發(fā)現(xiàn)感應(yīng)
  64.                 {
  65.                         right();             // 右轉(zhuǎn)
  66.                         if(judgefollow==1)     //發(fā)現(xiàn)感應(yīng)
  67.                         advance();                 //前進(jìn),跟隨目標(biāo)
  68.                 }               
  69.         }        
  70. }
  71. void main()
  72. {
  73.           P1 = 0x00;
  74.             P3 = 0x00;        
  75.             if(switchfollow==1){A;}         //控制人體感應(yīng)開(kāi)關(guān)
  76.             if(switchredlight==1){B;}         //控制紅外開(kāi)關(guān)
  77.             if(switchfeellight==1){C;}   //控制光敏開(kāi)關(guān)               
  78.             if(judgelefta==1&&judgeleftb==1&&judgerighta==1&&judgerightb==1&&judgefollow==1)  
  79.             {
  80.                             advance();
  81.             }                                                   //未發(fā)現(xiàn)感應(yīng),保持前進(jìn)
  82.             else if(judgefollow==0)                   //感應(yīng)到前方有人
  83.             {
  84.                             follow();                           //         跟隨
  85.             }
  86.             else if(judgelefta==0||judgeleftb==0)
  87.             {
  88.                             back();
  89.                         DelayMS(1000);
  90.                         left();
  91.                         DelayMS(1000);
  92.                         advance();               
  93.             }                                           //        小車(chē)感應(yīng)到右邊有物體,進(jìn)行左轉(zhuǎn)
  94.              else if(judgerighta==0||judgerightb==0)
  95.             {
  96.                             back();
  97.                         DelayMS(1000);
  98.                         right();
  99.                         DelayMS(1000);
  100.                         advance();                //同上,但這次是右邊
  101.             }
  102.              else if(judgerightb==0&&judgeleftb==0)           //小車(chē)進(jìn)入黑暗中,開(kāi)始后退
  103.             {
  104.                             back();
  105.                       if(judgeleftb==1)                         //發(fā)現(xiàn)左邊有光
  106.                         {
  107.                                 left();                         //左轉(zhuǎn)前進(jìn)
  108.                                 DelayMS(1000);
  109.                                 advance();        
  110.                         }
  111.                          if(judgerightb==1)                         //發(fā)現(xiàn)右邊有光
  112.                         {
  113.                                 right();                         //右轉(zhuǎn)前進(jìn)
  114.                                 DelayMS(1000);
  115.                                 advance();        
  116.                         }
  117.             }
  118.             else if(judgerighta==0&&judgelefta==0)  //正前方發(fā)現(xiàn)障礙                              
  119.             {
  120.                             back();                                    //后退
  121.                         DelayMS(1000);
  122.                         left();                                    //左轉(zhuǎn)
  123.                         DelayMS(1000);
  124.                         advance();                                   //前進(jìn)
  125.             }
  126. }
復(fù)制代碼


避障小車(chē).zip

78.38 KB, 下載次數(shù): 9, 下載積分: 黑幣 -5

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表