用Arduino驱动两个超声波传感器
各位。 我在尝试使用Arduino uno驱动两个HC-SR04超声波传感器时遇到问题。 当a尝试显示每个传感器的两个测量值时,其中一个工作正常,但另一个显示值0 我的代码如下所示: } 情况是,在串行监视器上,“距离1”显示正确的值,而“距离2”始终为0 我发现,当“duration1”和“duration2”交换顺序时(这意味着duration2先运行,然后duration1运行),结果是distance1显示0,而distance2显示正确的值 当我使用“pulseIn”函数时,似乎出现了一些问题,对吗用Arduino驱动两个超声波传感器,arduino,Arduino,各位。 我在尝试使用Arduino uno驱动两个HC-SR04超声波传感器时遇到问题。 当a尝试显示每个传感器的两个测量值时,其中一个工作正常,但另一个显示值0 我的代码如下所示: } 情况是,在串行监视器上,“距离1”显示正确的值,而“距离2”始终为0 我发现,当“duration1”和“duration2”交换顺序时(这意味着duration2先运行,然后duration1运行),结果是distance1显示0,而distance2显示正确的值 当我使用“pulseIn”函数时,似乎出现了
谁能帮我解决这个问题,谢谢 除了异步问题外,还可能存在一个问题,即传感器通过一个传感器的Ping信号到达两个传感器而相互干扰 要解决这个问题,您需要通过将传感器拉高来ping一个传感器,并读取长度。然后,您将需要它们之间的短暂延迟,以允许ping消失。然后,您应该对第二个传感器执行相同的操作
这使您能够获得最准确的读数。还提出了其他问题:
试试这个
int TriggerPIN1 = 9;
int EchoPIN = 10;
int TiggerPIN2 = 5;
int EchoPIN2 = 4;
void setup(){
pinMode(TriggerPIN1,OUTPUT);
pinMode(EchoPIN2,INPUT);
pinMode(TriggerPIN2,OUTPUT);
pinMode(EchoPIN2,INPUT);
Serial.begin(9600);
}
void loop(){
digitalWrite(TriggerPIN1,LOW);
delayMicroseconds(2);
digitalWrite(TriggerPIN1,HIGH);
delayMicroseconds(2);
digitalWrite(TriggerPIN1,LOW);
long timedelay = pulseIn(EchoPIN1,HIGH);
int distance1 = 0.0343 * (timedelay/2);
Serial.print("Sensor 1 : ");
Serial.println(distance1);
delayMicroseconds(2);
digitalWrite(TriggerPIN2,LOW);
delayMicroseconds(2);
digitalWrite(TriggerPIN2,HIGH);
delayMicroseconds(2);
digitalWrite(TriggerPIN2,LOW);
long td = pulseIn(EchoPIN2,HIGH);
int distance2 = 0.0343 * (td/2);
Serial.print("Sensor 2 : ");
Serial.println(distance2);
}
两个传感器并行工作,但脉冲星功能是串行执行的。这就是你的代码不能工作的原因。让我们想象一下,当你用右手抛两个球时,试着用右手一个接一个地接住它们。当你接住一个球并把它放进盒子里时,另一个球掉在了地上。这就是为什么第一个脉冲能得到正确的值,而第二个脉冲不能得到正确的值。要解决您的问题,请使用两个传感器串联,即触发第一个传感器,然后对第一个传感器使用脉冲信号,以获得第一个测量值,并对第二个传感器重复此操作。答案在注释中太糟糕了。现在这个问题无法回答。
int TriggerPIN1 = 9;
int EchoPIN = 10;
int TiggerPIN2 = 5;
int EchoPIN2 = 4;
void setup(){
pinMode(TriggerPIN1,OUTPUT);
pinMode(EchoPIN2,INPUT);
pinMode(TriggerPIN2,OUTPUT);
pinMode(EchoPIN2,INPUT);
Serial.begin(9600);
}
void loop(){
digitalWrite(TriggerPIN1,LOW);
delayMicroseconds(2);
digitalWrite(TriggerPIN1,HIGH);
delayMicroseconds(2);
digitalWrite(TriggerPIN1,LOW);
long timedelay = pulseIn(EchoPIN1,HIGH);
int distance1 = 0.0343 * (timedelay/2);
Serial.print("Sensor 1 : ");
Serial.println(distance1);
delayMicroseconds(2);
digitalWrite(TriggerPIN2,LOW);
delayMicroseconds(2);
digitalWrite(TriggerPIN2,HIGH);
delayMicroseconds(2);
digitalWrite(TriggerPIN2,LOW);
long td = pulseIn(EchoPIN2,HIGH);
int distance2 = 0.0343 * (td/2);
Serial.print("Sensor 2 : ");
Serial.println(distance2);
}