정보나눔

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

초음파 두게를 &&로 했는데 안읽혀요 ㅠㅠㅠ
이재환 | 2016-04-29

~~~2는 값이 추출되는데

~~~1은 값이 추출되지않습니다 혹시 해결방안 아시는분 있으신가요 ??ㅜㅜ

 

int echoPin2 = 3; //  초음파
int trigPin2 = 4;

int echoPin1 = 5; //  초음파
int trigPin1 = 6;

char sendMsg;   

void setup() {
  Serial.begin(115200);
  pinMode(trigPin1, OUTPUT); //초음파
  pinMode(echoPin1, INPUT);
  
  pinMode(trigPin2, OUTPUT); //초음파
  pinMode(echoPin2, INPUT);

   sendMsg = '0';
  // put your setup code here, to run once:

}

void loop() {
  float duration1, distance1 ;
 digitalWrite(trigPin1, HIGH);
 delay(10);
 digitalWrite(trigPin1, LOW);
 // 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
 
 duration1 = pulseIn(echoPin1, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장 한다.
distance1 = ((float)(340 * duration1) / 10000) / 2;

 float duration2, distance2 ;
 digitalWrite(trigPin2, HIGH);
 delay(10);
 digitalWrite(trigPin2, LOW);
 // 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
 
 duration2 = pulseIn(echoPin2, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장 한다.
distance2 = ((float)(340 * duration2) / 10000) / 2;
  
  
  if (distance1&&distance2 < 7) //7cm 이하면
  { 
   sendMsg = 'S'; //멈춤

    delay(100);
  }
  
    else
    {
      if (7 < distance1&&distance2 < 18) // 7~18
    
        { 
          sendMsg = 'H';
      
          delay(100);
        }
        else // 18 이상
        {
         sendMsg = 'M';
         
         delay(100);
         }
    }
  

 Serial.write(sendMsg);
}

프로필사진

수박쨈 2016-05-02 10:11:23

초음파의 거리값인 distance값이 센서에서 측정되지 않는다는 건가요??

지금 보시면 문법적으로 조건문이 이상합니다.

 

  if (distance1&&distance2 < 7) //7cm 이하면
  { 
   sendMsg = 'S'; //멈춤

    delay(100);
  }

위 조건문에서 &&는 두개의 조건을 묶는 함수지 distance1과 distance2을 동시에 묶는 연산자가 아닙니다.

위 같이 조건문을 작성하면 distance1은 1보다 크기 때문에 true라는 조건을 가지게 되며 결국 distance2가 7보다 작을 경우에만 S라는 문구를 출력합니다.

 

if (7 < distance1&&distance2 < 18) // 7~18

또 위 조건문은 의도하신바가 맞는지는 모르겠지만 저렇게 쓸 경우는 distance1이 7보다 크고 distance2가 18보다 작을 경우에만 실행됩니다.

distance1과 distance2 모두가 7보다 크고 18보다 작을 경우에만 조건문을 실행하도록 하기 위해서는 조건문의 수정이 필요합니다.

프로필사진

이재환 2016-05-02 15:13:34

혹시 and문으로 하려고하는데 어떻게 고치면 되는지 알려주실수 있으신가요???ㅜㅜㅜ

이전글   |    아두이노를 이용하여 대기행렬을 적용한 엘리베이터를 만드는데..질문이있어요... 2016-04-29
다음글   |    맥 아두이노 업로드 에러 문제입니다. 2016-05-01