Arduino小車感應跟隨

蜗牛的礼物發表於2024-07-10
//前進
void Forward(){
  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
  digitalWrite(4,HIGH);
  digitalWrite(5,LOW);
}
//後退
void BackOff(){
  digitalWrite(2,HIGH);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,HIGH);
}
//左轉
void TurnLeft(){
  //小車左轉(左輪後退)
  digitalWrite(2,HIGH);
  digitalWrite(3,LOW);
  //小車左轉(右輪前進)
  digitalWrite(4,HIGH);
  digitalWrite(5,LOW);
}
//右轉
void TurnRight(){
  //小車右轉(右輪後退)
  digitalWrite(4,LOW);
  digitalWrite(5,HIGH);
  //小車右轉(左輪前進)
  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
}

//停止
void Stop(){
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
}

//獲取距離
long getLen(){
  //傳送一個10us的訊號給超聲波
  digitalWrite(9,LOW);
  delayMicroseconds(2);
  digitalWrite(9,HIGH);
  delayMicroseconds(10);
  digitalWrite(9,LOW);//超聲波內部開始震盪,準備傳送波
  long time;
  long length;
  //關注Echo高電平維持的時間,代表超聲波傳送到返回的時間
  time = pulseIn(8,HIGH);
  //距離= 時間(us) * 速度(340m/s)=》 微秒 * 釐米 / 往返 2
  // 微秒轉秒;米轉釐米;=》(time/1000000) * (340*100) / 2
  length = time * 0.017000;
  return length;
}

void Init(){
  // put your setup code here, to run once:
  //串列埠初始化
  //配置2,3口為輸出引腳(左輪初始化)
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  //配置4,5口為輸出引腳(右輪初始化)
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  //Trig接9,透過9傳送一個觸發訊號給超聲波
  pinMode(9,OUTPUT);
  //Echo接8,透過讀取8高電平維持的實踐,確認超聲波哦在空氣中傳播的時間
  pinMode(8,INPUT);
  //pinMode(LED_BUILTIN,OUTPUT);
  //串列埠
  //Serial.begin(9600);
}

void setup() {
  // put your setup code here, to run once:
  //初始化
  Init();
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(20); //延遲一下,放緩超聲波互動速度,比較不卡頓(加強體驗)
  long len = getLen();
  //距離大於3且小於13,後退
  if(len > 3 && len < 13){
    BackOff();
  }
  //距離大於14且小於40,前進
  if(len > 14 && len < 40){
    Forward();
  }
  //距離大於50,停下來
  if(len > 50){
    Stop();
  }
  //Serial.println(len);
  //Serial.println("cm");
}

相關文章