Advertisement
Guest User

Untitled

a guest
May 20th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.89 KB | None | 0 0
  1. //匯入
  2.  
  3. #include <Arduino.h>
  4. #include <Wire.h>
  5. #include <SoftwareSerial.h>
  6. #include <MeMCore.h>
  7.  
  8. //自訂參數
  9. MBotDCMotor motor_left(9);
  10. MBotDCMotor motor_right(10);
  11. MeLineFollower IF1(2);    // ss1 ss2
  12. MeLineFollower IF2(1);    // ss3
  13. MeLineFollower IF3(4);    // ss4 ss5
  14. MeUltrasonicSensor UTS(3);//超音波
  15. MeBuzzer buzzer; //嗡鳴器
  16. byte ReturnIF1;
  17. byte ReturnIF2;
  18. byte ReturnIF3;
  19. int buttom;
  20. int distance;   //設定一個參數為distance
  21. bool times = false;       //設定一個是否值
  22. const int Ttimes = 3;      //目標計算次數
  23. bool times2 = false;       //設定一個是否值
  24. const int Ttimes2 = 3;      //設定計算次數
  25. bool times3 = false;       //設定一個是否值
  26. const int Ttimes3 = 3;      //設定計算次數
  27. void setup()
  28. {
  29.   Serial.begin(115200);     //串列阜(之後要刪除)
  30.   buzzer.tone(262,200);
  31.   buzzer.tone(294,200);
  32.   buzzer.tone(330,200);    //輸出已開機訊號
  33.   }
  34. void loop()
  35. {
  36.   buttom=analogRead(A7);         //設定buttom為板載按鈕
  37.   ReturnIF1=IF1.readSensors();
  38.   ReturnIF2=IF2.readSensors();
  39.   ReturnIF3=IF3.readSensors();   //設定五路的感測資料位置
  40.   distance=UTS.distanceCm();     //令超音波資料為distance
  41.   int Atimes = 0;
  42.   int Atimes2 = 0;
  43.   int Atimes3 = 0;
  44.   Serial.println(distance);       //串列阜(之後要刪除)
  45.  
  46.    if(buttom<10){                //按鈕按下去後執行
  47.  
  48.    if(distance >= 5){          //距離小於5cm
  49.     Serial.println("closer");     //輸出距離太小(之後要刪除)
  50.     motor_left.run(255);
  51.     motor_right.run(-255);
  52.     delay(200);   //後退
  53.     motor_left.run(-55);
  54.     motor_right.run(255);
  55.     delay(500);    //左轉
  56.     motor_left.run(-255);
  57.     motor_right.run(255);
  58.     delay(200);    //前進
  59.     motor_left.run(-255);
  60.     motor_right.run(55);
  61.     delay(700);    //右轉
  62.     motor_left.run(-255);
  63.     motor_right.run(255);
  64.     delay(150);    //接線時請調150,鋰電池時請調250(前進)
  65.     motor_left.run(255);
  66.     motor_right.run(0);
  67.     delay(680);    //回復路線
  68.     }else{
  69.     Serial.println("far");                 //輸出距離太遠(之後要刪除)
  70.  
  71.  
  72.     if(times){          
  73.     times = true;       //開始計算
  74.     while(Atimes <Ttimes){        //計算次數(次數(0~3)<目標次數)
  75.     if (ReturnIF1==0 && ReturnIF2==0 && ReturnIF3==0) // 全感黑
  76.    
  77.      {  
  78.        break;       //就跳出
  79.      }
  80.      else
  81.      {
  82.         motor_left.run(-255);   //直走
  83.         motor_right.run(255);
  84.         delay(20);              //0.02毫秒(未測試)
  85.         Atimes++;               //次數+1
  86.       }
  87.       }
  88.  
  89.       if(Atimes == Ttimes){     //次數=目標次數
  90.         while(ReturnIF1!=0 && ReturnIF2!=0 && ReturnIF3!=0) //假如是白
  91.         {
  92.           motor_left.run(-255);
  93.           motor_right.run(255);
  94.          //直走
  95.           }
  96.       }
  97.     times = false;       //結束計算
  98.     }
  99.  
  100.  
  101.  
  102.     if(times2){          
  103.     times2 = true;       //開始計算
  104.     while(Atimes2 <Ttimes2){        //計算次數(次數(0~3)<目標次數)
  105.     if (ReturnIF1!=0 && ReturnIF2!=0 && ReturnIF3!=0) // 全感白
  106.    
  107.      {  
  108.        break;       //就跳出
  109.      }
  110.      else
  111.      {
  112.         motor_left.run(-255);   //直走
  113.         motor_right.run(255);
  114.         delay(20);              //0.02毫秒(未測試)
  115.         Atimes2++;               //次數+1
  116.       }
  117.       }
  118.  
  119.       if(Atimes2 == Ttimes2){     //次數=目標次數
  120.         while(ReturnIF1==0 && ReturnIF2==0 && ReturnIF3==0) //假如是黑
  121.         {
  122.           motor_left.run(-255);
  123.           motor_right.run(255);
  124.          //直走
  125.           }
  126.       }
  127.     times2 = false;       //結束計算
  128.     }
  129.  
  130.  
  131.    
  132.    
  133.     //以下為新型循線
  134.     // ==0 = 黑  !=0 = 白
  135.     if(ReturnIF1!=0 && ReturnIF2==0 && ReturnIF3!=0)        //ss3感黑 其他感白
  136.       {  
  137.         //白黑白
  138.          motor_left.run(-255);
  139.          motor_right.run(255);
  140.          //直走
  141.       }
  142.      else if (ReturnIF1==0 && ReturnIF2!=0 && ReturnIF3!=0) // 一二路感黑 其他感白
  143.      {  
  144.          //黑白白
  145.          motor_left.run(0);
  146.          motor_right.run(255);
  147.          //往左 (未測試)
  148.       }
  149.       else if (ReturnIF1==0 && ReturnIF2==0 && ReturnIF3!=0) // 四五路感白 其他感黑
  150.      {  
  151.          //黑黑白
  152.          motor_left.run(-255);
  153.          motor_right.run(0);
  154.          //往右(未測試)
  155.       }
  156.       else if (ReturnIF1!=0 && ReturnIF2!=0 && ReturnIF3==0) // 四五路感黑 其他感白
  157.      {
  158.          //白白黑
  159.          motor_left.run(0);
  160.          motor_right.run(255);
  161.          //往左 (未測試)
  162.       }
  163.       else if (ReturnIF1!=0 && ReturnIF2==0 && ReturnIF3==0) // 一二路感白 其他感黑
  164.      {  
  165.          //白黑黑
  166.          motor_left.run(-255);
  167.          motor_right.run(0);
  168.          //往右(未測試)
  169.       };
  170.       }
  171.     }
  172.     };
  173.   //以上為超音波感測器
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement