everyone. I've got a problem while I try to use Arduino uno to drive two HC-SR04 ultrasonic sensor. While a try to display two measured value from each sensor, one of them work fine but the other displays value 0.
I've found that while "duration1" and "duration2" exchange their order(which means duration2 runs first, then duration1 runs.), the result becomes that distance1 shows 0 but distance2 shows correct value.
It seems there are some problems while I using the function "pulseIn", is that right?
Could anyone help me fix this problem, thanks! Small Bio
[code]int trigPin=12; // this pin work as the output of the two trig pin of the two sensor
int echoPin1=8;
int echoPin2=13;
void setup()
{
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(echoPin2, INPUT);
}
void loop()
{
float duration1, distance1, duration2, distance2;
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW); //trig:10 microsecond TTL pulse
duration1 = pulseIn(echoPin1, HIGH);
duration2 = pulseIn(echoPin2, HIGH);
distance1 = duration1/2/29.1;
distance2 = duration2/2/29.1;
Serial.print(distance1);
Serial.print(',');
Serial.println(distance2);
delay(20);
}[/code]
The situation is that on the Serial Monitor, "distance1" shows correct value however "distance2" is always 0.I've found that while "duration1" and "duration2" exchange their order(which means duration2 runs first, then duration1 runs.), the result becomes that distance1 shows 0 but distance2 shows correct value.
It seems there are some problems while I using the function "pulseIn", is that right?
Could anyone help me fix this problem, thanks! Small Bio
Besides the asynchronous problem, there might be an issue where the sensors interfere with each other by the Ping from one sensor reaching both.[quote=Patricia post_id=117 time=1487599729 user_id=75]everyone. I've got a problem while I try to use Arduino uno to drive two HC-SR04 ultrasonic sensor. While a try to display two measured value from each sensor, one of them work fine but the other displays value 0.
The situation is that on the Serial Monitor, "distance1" shows correct value however "distance2" is always 0.[code]int trigPin=12; // this pin work as the output of the two trig pin of the two sensor int echoPin1=8; int echoPin2=13; void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin1, INPUT); pinMode(echoPin2, INPUT); } void loop() { float duration1, distance1, duration2, distance2; digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); //trig:10 microsecond TTL pulse duration1 = pulseIn(echoPin1, HIGH); duration2 = pulseIn(echoPin2, HIGH); distance1 = duration1/2/29.1; distance2 = duration2/2/29.1; Serial.print(distance1); Serial.print(','); Serial.println(distance2); delay(20); }[/code]
I've found that while "duration1" and "duration2" exchange their order(which means duration2 runs first, then duration1 runs.), the result becomes that distance1 shows 0 but distance2 shows correct value.
It seems there are some problems while I using the function "pulseIn", is that right?
Could anyone help me fix this problem, thanks![/quote]
To combat this, you need to ping one sensor by pulling it high, and read the length. Then, you'll want a short delay between them to allow the ping to die off. Then, you should do the same for the second sensor.
This allows you to get the most accurate readings.
Recommended tutorial:





































