[英]Driving two Ultrasonic sensor with Arduino
每个人。 我在尝试使用 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);
情况是在串行监视器上,“distance1”显示正确的值,但“distance2”始终为 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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.