我为Arduino编写了一个程序,目的是避免使用三个超声波传感器来避免物体,但它在编译时会出错。为什么会出现错误,我该如何解决?
int trigPin = 6;
int echoPin = 7;
int trigPin = 8;
int echoPin = 9;
int trigPin = 10;
int echoPin = 11;
int revleft4 = 2;
int fwdleft5 = 3;
int revright6 = 4;
int fwdright7 = 5;
long duration, distance, RightSensor,FrontSensor,LeftSensor;
void setup()
{
delay(random(500,2000));
Serial.begin (9600);
pinMode(revleft4, OUTPUT);
pinMode(fwdleft5, OUTPUT);
pinMode(revright6, OUTPUT);
pinMode(fwdright7, OUTPUT);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);
}
void loop()
SonarSensor(trigPin1, echoPin1);
RightSensor = distance;
SonarSensor(trigPin2, echoPin2);
LeftSensor = distance;
SonarSensor(trigPin3, echoPin3);
FrontSensor = distance;
if(FrontSensor<=20 && LeftSensor<=20)
{
Serial.println("Turn right");
digitalWrite(fwdright7,HIGH);
digitalWrite(revright6,LOW);
digitalWrite(fwdleft5,HIGH);
digitalWrite(revleft4,LOW);
}
else if(FrontSensor<=20 && RightSensor<=20)
{
Serial.println("Turn left");
digitalWrite(fwdright7,LOW);
digitalWrite(revright6,HIGH);
digitalWrite(fwdright5,LOW);
digitalWrite(revright4,HIGH);
}
else
{
Serial.println("Forward");
digitalWrite(fwdright7,LOW);
digitalWrite(revright6,HIGH);
digitalWrite(fwdright5,HIGH);
digitalWrite(revright4,LOW);
}
delay(5);
}
void SonarSensor(int trigPin,int echoPin)
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration/58.2;
}
答案 0 :(得分:1)
Arduinos错误消息非常容易理解。您基本上只需要阅读它们并解决他们抱怨的地方即可。
编译代码始于:
FRF9LJ5IVO3SD4B:3:5: error: redefinition of 'int trigPin'
int trigPin = 8;
^~~~~~~
..\FRF9LJ5IVO3SD4B\FRF9LJ5IVO3SD4B.ino:1:5: note: 'int trigPin' previously defined here
int trigPin = 6;
^~~~~~~
因此,很明显您多次使用了变量trigPin。
看看您的代码就会发现:
int trigPin = 6;
int echoPin = 7;
int trigPin = 8;
int echoPin = 9;
int trigPin = 10;
int echoPin = 11;
您实际上定义了trigPin和echoPin三次!
稍后您使用trigPin1
,trigPin2
,trigPin3
,...
像这样修复后
int trigPin1 = 6;
int echoPin1 = 7;
int trigPin2 = 8;
int echoPin2 = 9;
int trigPin3 = 10;
int echoPin3 = 11;
再次编译,我们面对
FRF9LJ5IVO3SD4B:34:1: error: expected initializer before 'SonarSensor'
SonarSensor(trigPin1, echoPin1);
^~~~~~~~~~~
快速查看您的代码
void loop()
SonarSensor(trigPin1, echoPin1);
表明您在{
之后缺少loop()
,无法打开定义loop
的代码段
添加它,进行编译,我们就会看到
\FRF9LJ5IVO3SD4B\FRF9LJ5IVO3SD4B.ino: In function 'void loop()':
FRF9LJ5IVO3SD4B:56:16: error: 'fwdright5' was not declared in this scope
digitalWrite(fwdright5,LOW);
^~~~~~~~~
所以您使用的是fwdright5
,但是您只在这里声明了fwdright7
int revleft4 = 2;
int fwdleft5 = 3;
int revright6 = 4;
int fwdright7 = 5;
我不知道您打算使用哪个是正确的,所以我将删除它的任何使用以查看接下来会弹出哪些错误。
与revright4
相同。修复您的代码后,即可编译。
您需要更加集中精力,并且必须阅读错误消息!