Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 2229|回復: 6

該如何獨立運作3個不同或以上的超音波感測?

[複製鏈接]
發表於 2018-5-9 21:24:37 | 顯示全部樓層 |閱讀模式
該如何獨立運作不同的超音波?
程式需求:  三個超音波各有3個相應的led 燈 當有物體接近或離開各個超音波會亮
我是用mega版,超音波是hc-hr04
有試做之後 發現監控視窗出來的都是0公分 或是51公分     
是哪裡有問題?   
程式如下

int ledPin1 = 3;
int ledPin2 = 4;
int ledPin3 = 5;

int trigPin1 = 6;
int echoPin1 = 7;

int trigPin2 = 8;
int echoPin2 = 9;

int trigPin3 = 10;
int echoPin3 = 11;

void setup() {
  Serial.begin (9600);
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
  
  pinMode(trigPin3, OUTPUT);
  pinMode(echoPin3, INPUT);
  
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
}

void firstsensor(){
  int duration1, distance1;
  digitalWrite (trigPin1, HIGH);
  delayMicroseconds (10);
  digitalWrite (trigPin1, LOW);
  duration1 = pulseIn (echoPin1, HIGH);
  distance1 = (duration1/2) / 29.1;

      Serial.print("1st Sensor: ");
      Serial.print(distance1);  
      Serial.print("cm    ");

  if (distance1 < 30) {
    digitalWrite (ledPin1, HIGH);
  } else {
    digitalWrite (ledPin1, LOW);
  }   
}
void secondsensor(){
    int duration2, distance2;
    digitalWrite (trigPin2, HIGH);
    delayMicroseconds (10);
    digitalWrite (trigPin2, LOW);
    duration2 = pulseIn (echoPin2, HIGH);
    distance2 = (duration2/2) / 29.1;
  
      Serial.print("2nd Sensor: ");
      Serial.print(distance2);  
      Serial.print("cm    ");
   
    if (distance2 < 20) {  
      digitalWrite (ledPin2, HIGH);
    }
else {
      digitalWrite (ledPin2, LOW);
    }   
}
void thirdsensor(){ // This function is for third sensor.
    int duration3, distance3;
    digitalWrite (trigPin3, HIGH);
    delayMicroseconds (10);
    digitalWrite (trigPin3, LOW);
    duration3 = pulseIn (echoPin3, HIGH);
    distance3 = (duration3/2) / 29.1;

      Serial.print("3rd Sensor: ");   
      Serial.print(distance3);  
      Serial.print("cm");
   
    if (distance3 < 10) {
      digitalWrite (ledPin3, HIGH);
    }
else {
      digitalWrite (ledPin3, LOW);
    }   
}

void loop() {
Serial.println("\n");
firstsensor();
secondsensor();
thirdsensor();
delay(100);
}
發表於 2018-5-10 08:14:14 | 顯示全部樓層
試試看
在不改程式的情況下, 先拔掉其中兩個超音波的電源
結果會怎樣?
 樓主| 發表於 2018-5-10 12:52:11 | 顯示全部樓層
結果是一樣的   
發表於 2018-5-10 12:58:55 | 顯示全部樓層
是不是接錯了?
看來程式是OK
所以不管有沒有物體, 距離都是 0 或 51 嗎?


 樓主| 發表於 2018-5-10 13:16:01 | 顯示全部樓層
應該不是接錯了   我跟我朋友有都檢查好幾次   
我只測試1個示波器時是有功能的  但到2個以上功能就不能了    (硬體方面都沒有動

會是程式衝突嗎?
發表於 2018-5-10 14:42:48 | 顯示全部樓層
我試過沒問題, 除了沒加3 個 LED
都可正常讀到距離值
DSC_0325.JPG
發表於 2018-5-10 14:51:44 | 顯示全部樓層
對了, 超音波會互相影響, 使用時要朝向不同方位
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-4-18 19:34 , Processed in 0.221324 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表