//前進 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"); }