如何使用 2 HCSR04 Arduino 组件?

How to work with 2 HCSR04 Arduino Component?

对于使用 2 个不同超声波传感器的代码有什么想法吗?这个想法是当其中一个传感器检测到传感器前面的物体时,它会自动打开蜂鸣器。但目前,我只使用 2 个超声波传感器。这是我的代码,没有按预期工作:

#define trigPin1 3
#define echoPin1 2
#define trigPin2 4
#define echoPin2 5

long duration, distance, RightSensor,LeftSensor;

void setup()
{
  Serial.begin (9600);
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
}

void loop() {
  SonarSensor(trigPin1, echoPin1);
  RightSensor = distance;

  SonarSensor(trigPin2, echoPin2);
  LeftSensor = distance;

  Serial.print(LeftSensor);
  Serial.print(" | ");
  Serial.println(RightSensor);
  }

  void SonarSensor(int trigPin,int echoPin)
  {
    digitalWrite(trigPin, LOW);
    delay(2);
    digitalWrite(trigPin, HIGH);
    delay(2);
    digitalWrite(trigPin, LOW);
    
    duration = pulseIn(echoPin, HIGH);
    distance = (duration/2) / 29.1;
}

解决此问题的更好方法是创建一个 returns 距离较长的函数。代码如下所示:

long duration, distance, RightSensor,LeftSensor;

void setup()
    {
    Serial.begin (9600);
    pinMode(trigPin1, OUTPUT);
    pinMode(echoPin1, INPUT);
    pinMode(trigPin2, OUTPUT);
    pinMode(echoPin2, INPUT);
    }
void SonarSensor(int trigPin,int echoPin)
    {
     digitalWrite(trigPin, LOW);
     delay(2);
     digitalWrite(trigPin, HIGH);
     delay(2);
     digitalWrite(trigPin, LOW);
      
     duration = pulseIn(echoPin, HIGH);
     distance = (duration/2) / 29.1;
     return distance;
    }
void loop()
    {
    RightSensor = SonarSensor(trigPin1, echoPin1);
    LeftSensor = SonarSensor(trigPin2, echoPin2);
    
    Serial.printIn(LeftSensor);
    Serial.print(" | ");
    Serial.printIn(RightSensor);
    }

如果您的读数有误,请尝试使用以下函数代码:

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 * 0.034 / 2;
  return distance;

如果要使用原代码,将void SonarSensor移到void loop之前,并将distance设置为全局长。