|
本帖最後由 sam21408 於 2016-12-5 23:00 編輯
我看著書的解說,設計一個超音波避障車,結果車子只會前進幾秒,後退幾秒,右後轉,一直重複,請問我哪裡打錯,我是新手海請各位高手幫幫忙。
#include <Servo.h>
Servo servo;
const int ECHOPIN=2;
const int TRIGPIN=4;
const int negR=7;
const int posR=8;
const int negL=12;
const int posL=13;
const int pwmR=5;
const int pwmL=6;
const int Rspeed=150;
const int Lspeed=150;
const int rotSpeed=180;
unsigned long Rdistance;
unsigned long Ldistance;
unsigned long Cdistance;
void setup()
{
pinMode(posR,OUTPUT);
pinMode(negR,OUTPUT);
pinMode(posL,OUTPUT);
pinMode(negL,OUTPUT);
pinMode(TRIGPIN,OUTPUT);
pinMode(ECHOPIN, INPUT);
servo.attach(3);
servo.write(90);
}
void loop()
{
servo.write(90);
delay(500);
Cdistance=ping(TRIGPIN );
if(Cdistance<8)
{
pause(0,0);
servo.write(45);
delay(500);
Rdistance=ping(TRIGPIN);
servo.write(135);
delay(500);
Ldistance=ping(TRIGPIN);
servo.write(90);
if(Rdistance<8 && Ldistance<8)
{
back(Rspeed,Lspeed);
delay(2000);
right(rotSpeed,rotSpeed);
delay(500);
forward(Rspeed,Lspeed);
}
else if(Rdistance>Ldistance)
{
right(rotSpeed,rotSpeed);
delay(500);
}
else if(Ldistance>Rdistance)
{
left(rotSpeed,rotSpeed);
delay(500);
}
}
else
forward(Rspeed,Lspeed);
}
int ping(int)
{
unsigned long cm,duration;
digitalWrite(TRIGPIN,HIGH);
delayMicroseconds(2);
digitalWrite(TRIGPIN,HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN,LOW);
duration=pulseIn(ECHOPIN,HIGH);
cm=duration/29/2;
return cm;
}
void forward(byte RmotorSpeed, byte LmotorSpeed)
{
analogWrite(pwmR,RmotorSpeed);
analogWrite(pwmL,LmotorSpeed);
digitalWrite(posR,HIGH);
digitalWrite(negR,LOW);
digitalWrite(posL,LOW);
digitalWrite(negL,HIGH);
}
void back(byte RmotorSpeed, byte LmotorSpeed)
{
analogWrite(pwmR,RmotorSpeed);
analogWrite(pwmL,LmotorSpeed);
digitalWrite(posR,LOW);
digitalWrite(negR,HIGH);
digitalWrite(posL,HIGH);
digitalWrite(negL,LOW);
}
void pause(byte RmotorSpeed, byte LmotorSpeed)
{
analogWrite(pwmR,RmotorSpeed);
analogWrite(pwmL,LmotorSpeed);
digitalWrite(posR,LOW);
digitalWrite(negR,LOW);
digitalWrite(posL,LOW);
digitalWrite(negL,LOW);
}
void right(byte RmotorSpeed, byte LmotorSpeed)
{
analogWrite(pwmR,RmotorSpeed);
analogWrite(pwmL,LmotorSpeed);
digitalWrite(posR,LOW);
digitalWrite(negR,LOW);
digitalWrite(posL,LOW);
digitalWrite(negL,HIGH);
}
void left(byte RmotorSpeed, byte LmotorSpeed)
{
analogWrite(pwmR,RmotorSpeed);
analogWrite(pwmL,LmotorSpeed);
digitalWrite(posR,HIGH);
digitalWrite(negR,LOW);
digitalWrite(posL,LOW);
digitalWrite(negL,LOW);
} |
|