• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

新手求助 arduino小车以弄好的超声波部分粘贴到了操作界面下无法运行

zjz000 2016-02-05 浏览量:2060
#include    //舵机控制库
#include
DistanceSRF04 Dist;
int distance;
int EN2 = 14;  
int EN3 = 15;
int EN4 = 16;
int EN5 = 17;
int inputPin = 9;  // 定義超音波信號接收腳位
int outputPin =8;  // 定義超音波信號發射腳位
int EA = 3;
int EB = 5;
int lkf;
Servo myservo;        // 設 myservo
int directionn = 0;   // 前=8 後=2 左=4 右=6 
int distanceL=0;
int distanceF=0;
int distanceR=0;
int Fgo = 8;         // 前進
int Rgo = 6;         // 右轉
int Lgo = 4;         // 左轉
int Bgo = 2;         // 倒車
///////////////////////////////////////
void ting(void)
        {
          analogWrite(EA,0);
          analogWrite(EB,0); 
          digitalWrite(EN2,LOW);   
          digitalWrite(EN3,LOW);
          digitalWrite(EN4,LOW);   
          digitalWrite(EN5,LOW);       
        }
        
void qian(void)
        { 
          analogWrite(EA,254);//调节参数可调速度(0-255)
          analogWrite(EB,255);//调节参数可调速度(0-255)      
         digitalWrite(EN2,HIGH);
          digitalWrite(EN3,LOW);
          digitalWrite(EN4,HIGH);
          digitalWrite(EN5,LOW); 
        }
void hou(void)
        {        
          analogWrite(EA,255);//调节参数可调速度(0-255)
          analogWrite(EB,255); //调节参数可调速度(0-255) 
          digitalWrite(EN2,LOW);
          digitalWrite(EN3,HIGH);
          digitalWrite(EN4,LOW);
          digitalWrite(EN5,HIGH);            
        }
void zuo(void)
        {        
          analogWrite(EA,150);//调节参数可调速度(0-255)
          analogWrite(EB,150); //调节参数可调速度(0-255)
          digitalWrite(EN2,HIGH);
          digitalWrite(EN3,LOW);
          digitalWrite(EN4,LOW);
          digitalWrite(EN5,HIGH);
     
        }        
void you(void)
        {        
          analogWrite(EA,150);//调节参数可调速度(0-255)
          analogWrite(EB,150); //调节参数可调速度(0-255)
          digitalWrite(EN2,LOW);
          digitalWrite(EN3,HIGH);
          digitalWrite(EN4,HIGH);
          digitalWrite(EN5,LOW);
        }  
void ask_pin_F()   // 量出前方距離 
    {
      myservo.write(90);
      digitalWrite(outputPin, LOW);   // 讓超聲波發射低電壓2μs
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH);  // 讓超聲波發射高電壓10μs,這裡至少是10μs
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW);    // 維持超聲波發射低電壓
      float Fdistance = pulseIn(inputPin, HIGH);  // 讀差相差時間
      Fdistance= Fdistance/5.8/10;       // 將時間轉為距離距离(單位:公分)
      Serial.print("F distance:");      //輸出距離(單位:公分)
      Serial.println(Fdistance);         //顯示距離
      distanceF= Fdistance;              // 將距離 讀入Fspeedd(前速)
    } 
 void ask_pin_L()   // 量出左邊距離 
    {
      myservo.write(5);
      delay(100);
      digitalWrite(outputPin, LOW);   // 讓超聲波發射低電壓2μs
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH);  // 讓超聲波發射高電壓10μs,這裡至少是10μs
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW);    // 維持超聲波發射低電壓
      float Ldistance = pulseIn(inputPin, HIGH);  // 讀差相差時間
      Ldistance= Ldistance/5.8/10;       // 將時間轉為距離距离(單位:公分)
      Serial.print("L distance:");       //輸出距離(單位:公分)
      Serial.println(Ldistance);         //顯示距離
      distanceL = Ldistance;              // 將距離 讀入Lspeedd(左速)
    }  
void ask_pin_R()   // 量出右邊距離 
    {
      myservo.write(177);
      delay(100);
      digitalWrite(outputPin, LOW);   // 讓超聲波發射低電壓2μs
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH);  // 讓超聲波發射高電壓10μs,這裡至少是10μs
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW);    // 維持超聲波發射低電壓
      float Rdistance = pulseIn(inputPin, HIGH);  // 讀差相差時間
      Rdistance= Rdistance/5.8/10;       // 將時間轉為距離距离(單位:公分)
      Serial.print("R distance:");       //輸出距離(單位:公分)
      Serial.println(Rdistance);         //顯示距離
      distanceR = Rdistance;              // 將距離 讀入Rspeedd(右速)
    }  
void detection()        //測量3個角度(0.90.179)
    {      
      int delay_time = 250;   // 伺服馬達轉向後的穩定時間
      ask_pin_F();            // 讀取前方距離     
     if(distanceF<10)         // 假如前方距離小於10公分
      {
        ting();               // 清除輸出資料 
        delay(400);      // 等待伺服馬達穩定
        ask_pin_L();            // 讀取左方距離
        delay(400);      // 等待伺服馬達穩定
        ask_pin_R();            // 讀取右方距離  
         delay(400);      // 等待伺服馬達穩定      
        if(distanceL>distanceR)   //假如 左邊距離大於右邊距離
        {
         directionn = Rgo;      //向右走
        }
        
        if(distanceL<=distanceR)   //假如 左邊距離小於或等於右邊距離
        {
         directionn = Lgo;      //向左走
        } 
        
        if (distanceL< 10 && distanceR< 10)   //假如 左邊距離和右邊距離皆小於10公分
        {
         directionn = Bgo;      //向後走        
        }          
      }
      else                      //加如前方不小於(大於)25公分     
      {
        directionn = Fgo;        //向前走     
      }
     
    }  
void setup()
{
  myservo.attach(10);//水平舵机接10脚
  myservo.write(90);//输出舵机初始位置为90度
  pinMode(EN2,OUTPUT);
  pinMode(EN3,OUTPUT);
  pinMode(EN4,OUTPUT);
  pinMode(EN5,OUTPUT);
  pinMode(inputPin, INPUT);    // 定義超音波輸入腳位
  pinMode(outputPin, OUTPUT);  // 定義超音波輸出腳位  
  Serial.begin(9600);//设置波特率为9600bps
  lkf=0;
}
void loop()

    myservo.write(90);  //讓伺服馬達回歸 預備位置 準備下一次的測量   
  if(Serial.available())
  {
    lkf = Serial.read();
  switch(lkf)
  {
  case \'a\':
     qian();
     delay(150); 
     myservo.write(90);
     ask_pin_F();            // 讀取前方距離
     delay(250);      // 等待伺服馬達穩定
     if(distanceF<10)         // 假如前方距離小於10公分
    {
     hou();                    //  倒退(車)
     delay(150); 
     }
     lkf=0;  
     break;   
   case \'b\':
     hou();
     lkf=0;
     break;     
   case \'c\':
     zuo();
     delay(500);
     qian();
     delay(10);
     lkf=0;
     break;
   case \'d\':
    you();
    delay(500);
    qian();
    delay(10);
    lkf=0;
     break; 
   case \'e\':
    ting();
    lkf=0;
     break;  
   case \'j\': 
    myservo.write(90);
    detection();        //測量角度 並且判斷要往哪一方向移動
    if(directionn == 2)  //假如directionn(方向) = 2(倒車)             
   {
     hou();                    //  倒退(車)
     delay(300);
   }
   if(directionn == 6)           //假如directionn(方向) = 6(右轉)    
   {
     zuo();                // 双轮左转   
     delay(500);          
   }
   if(directionn == 4)          //假如directionn(方向) = 4(左轉)    
   {  
    you();                // 双轮右转 
    delay(500);   
   }  
   if(directionn == 8)          //假如directionn(方向) = 8(前進)      
   { 
    qian();                 // 正常前進  
    delay(100); 
   }
     lkf=\'j\';
     break;
    }
  }
 }
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:0

相关问题

问题达人换一批

新手求助 arduino小车以弄好的超声波部分粘贴到了操作界面下无法运行