정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

초음파센서 관련 질문 드립니다.
다움 | 2017-10-24

초음파센서 하나로 데이터값을 받아서 배열로 출력할때는 속도가 빨랐는데 

초음파센서 두개로 데이터값을 받아서 배열로 출력하니 속도가 느려졌네요

이유가 뭘까요? ㅠㅠㅠㅠㅠ

 

// 초음파센서의 송신부를 8번핀으로 설정합니다.
int trig1 = 8;
int trig2 = 10;
// 초음파센서의 수신부를 9번핀으로 설정합니다.
int echo1 = 9;
int echo2 = 9;
// LED를 A0핀으로 설정합니다.
int led = A0;


// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
// 변수를 선언하거나 초기화를 위한 코드를 포함합니다.
void setup() {
  // 초음파센서의 동작 상태를 확인하기 위하여 시리얼 통신을 설정합니다. (전송속도 9600bps)
  // 메뉴 Tool -> Serial Monitor 클릭
  Serial.begin(9600);
  // 초음파센서의 송신부로 연결된 핀을 OUTPUT으로 설정합니다.
  pinMode(trig1, OUTPUT);
  pinMode(trig2, OUTPUT);
  // 초음파센서의 수신부로 연결된 핀을 INPUT으로 설정합니다.
  pinMode(echo1, INPUT);
  pinMode(echo2, INPUT);
  // LED가 연결된 핀을 OUTPUT으로 설정합니다.
  pinMode(led, OUTPUT);
}

// setup() 함수가 호출된 이후, loop() 함수가 호출되며,
// 블록 안의 코드를 무한히 반복 실행됩니다.
void loop() {
  // 초음파 센서는 송신부와 수신부로 나뉘어 있으며,
  // 송신부터 수신까지의 시간을 기준으로 거리를 측정합니다.
  // 트리거로 연결된 핀이 송신부를 담당하며, 에코로 연결된 핀이 수신부를 담당합니다.
  // 송신부에서 2마이크로초 정도 또는 그 이상의 시간동안 초음파를 발생시킵니다.
  // 초음파 발생 전후로, 잡음을 제거하기 위하여 전류를 보내지 않도록 설정합니다.
  digitalWrite(trig1, LOW);
  digitalWrite(trig2, LOW);
  digitalWrite(echo1, LOW);
  digitalWrite(echo2, LOW);
  delayMicroseconds(2);
  digitalWrite(trig1, HIGH);
  digitalWrite(trig2, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig1, LOW);
  digitalWrite(trig2, LOW);

  // 수신부의 초기 로직레벨을 HIGH로 설정하고, 반사된 초음파에 의하여 ROW 레벨로 바뀌기 전까지의 시간을 측정합니다.
  // 단위는 마이크로 초입니다.
  unsigned long duration1 = pulseIn(echo1, HIGH);
   unsigned long duration2 = pulseIn(echo2, HIGH);
  int A1=0;
  int A2=0;

  // 초음파의 속도는 초당 340미터를 이동하거나, 29마이크로초 당 1센치를 이동합니다.
  // 따라서, 초음파의 이동 거리 = duration(왕복에 걸린시간) / 29 / 2 입니다.
  float distance1 = duration1 / 29.0 / 2.0;
  float distance2 = duration2 / 29.0 / 2.0;

  // 측정된 거리 값를 시리얼 모니터에 출력합니다.
 // Serial.print(distance);
  //Serial.println("cm");
  char string[2];
  int cnt=0;
     if (distance1 < 6) {
    // LED가 연결된 핀의 로직레벨을 HIGH (5V)로 설정하여, LED가 켜지도록 합니다.
    A1='1';
 }
  // 측정된 거리가 10cm 이상이라면, 아래의 블록을 실행합니다.
  else {
    // LED가 연결된 핀의 로직레벨을 LOW (0V)로 설정하여, LED가 꺼지도록 합니다.
    A1='0';
  }

  if (distance2 < 6) {
    // LED가 연결된 핀의 로직레벨을 HIGH (5V)로 설정하여, LED가 켜지도록 합니다.
    A2='1';
 }
  // 측정된 거리가 10cm 이상이라면, 아래의 블록을 실행합니다.
  else {
    // LED가 연결된 핀의 로직레벨을 LOW (0V)로 설정하여, LED가 꺼지도록 합니다.
    A2='0';
  }
    string[0] = A1;
    string[1] = A2;
    Serial.print(string);
 
  // 0.2초 동안 대기합니다

}

이전글   |    서보모터 질문입니다. 2017-10-24
다음글   |    wifi쉴드랑 mp3쉴드를 2017-10-24