大家。 当我尝试使用Arduino uno驱动两个HC-SR04超声波传感器时,我遇到了问题。 尝试从每个传感器显示两个测量值时,其中一个工作正常但另一个显示值为0。
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);
情况是在串行监视器上,"距离1"然而,显示正确的值" distance2"总是0。
我发现" duration1"和" duration2"交换他们的订单(这意味着duration2首先运行,然后duration1运行。),结果变为distance1显示0但distance2显示正确的值。
当我使用函数" pulseIn"时似乎存在一些问题,是吗?
有人可以帮我解决这个问题,谢谢!
答案 0 :(得分:2)
除了异步问题之外,可能存在这样的问题:传感器通过Ping从一个传感器到达两者而相互干扰。
要解决此问题,您需要将一个传感器拉高,然后读取长度。然后,你会希望它们之间有一个短暂的延迟,以便ping死掉。然后,你应该为第二个传感器做同样的事情。
这使您可以获得最准确的读数。
答案 1 :(得分:1)
还提出了其他问题:
答案 2 :(得分:0)
试一下
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);
}