如何调试无法编译的Arduino程序?

时间:2019-11-24 08:55:11

标签: c++ arduino

我为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; 
}

1 个答案:

答案 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三次!

稍后您使用trigPin1trigPin2trigPin3,...

像这样修复后

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相同。修复您的代码后,即可编译。

您需要更加集中精力,并且必须阅读错误消息!

相关问题