如何使用2 HCSR04 Arduino组件?

发布于 2025-01-31 14:06:52 字数 1057 浏览 5 评论 0原文

对使用两个不同的超声传感器合作的守则有什么想法吗?这个想法是,当任何一个传感器都检测到传感器前方的OBJ时,它会自动打开蜂鸣器。但是目前,我只使用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;
}

”概念“

Any ideas for the code of working with 2 different ultrasonic sensors? The idea is when either one of the sensors detects an obj in front of the sensor, it automatically turns on a buzzer. But for now, I only use the 2 ultrasonic sensors. This is my code, doesnt work as expected:

#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;
}

Concept

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏の忆 2025-02-07 14:06:52

解决此问题的更好方法是制作返回距离​​长的函数。该代码看起来像这样:

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 void sonarsensor >并使距离变长。

A better way to approach this problem would be to make a function that returns the distance long. The code would look like this:

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);
    }

If you are getting wrong readings try using this code for the function:

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;

If you want to use the original code, move the void SonarSensor before void loop and make distance a global long.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文