• 아두이노_프로젝트. 03. 구현 오류. loop문의 실행이 한 번만 될 때.

    2020. 12. 2.

    by. KAEY

    #include<IRremote.h>
    
    
    int remote = 6;
    IRrecv ir(remote); //ir센서가(출력) 연결된 곳
    int piezo = 13;
    decode_results results;
    
    void setup()
    {
      ir.enableIRIn(); //적외선센서활성
      pinMode(2, OUTPUT);
      pinMode(3, INPUT);
      pinMode(piezo, OUTPUT);
      pinMode(remote, INPUT);
      Serial.begin(4800);
    
    }
    
    void loop()
    {   
      if(ir.decode(&results)){         
        Serial.println(results.value, HEX);
        analogWrite(11, 0); //led빨
      	analogWrite(10, 0); //led파
      	analogWrite(9, 0);  //led초
      	analogWrite(13, 0); //피에조
      
      
      	digitalWrite(2, HIGH);
      	delayMicroseconds(10);
      	digitalWrite(2, LOW);
      
      	long duration = pulseIn(3, HIGH);
        long distance = duration / 58.2;
        
        if(results.value == 0xFD30CF) { //리모컨 0번
      		  
      		if (duration == 0) {
      		  return;
      		}  
    
     		//int hertz = map(duration, 0, 1023, 20, 4000);
      		//저항값과 부저의 주파수의 범위가 달라서, 가변저항의 값인 0~1023
      		//부저의 주파수값인 20~4000을 매핑시키는 함수.
      		//0~1023인 가변저항값이랑 20~4000의 부저값을 매핑시킨다는 의미.
         
      		if (distance < 50) {
        	 analogWrite(11, 255);
       		 delayMicroseconds(2);
             digitalWrite(piezo, HIGH);
       		 //tone(13, hertz, 100);
              
    		   
     		 } else if (distance < 100) {
      		  analogWrite(10, 255);
      		  delayMicroseconds(2);
              digitalWrite(piezo, HIGH);
        	  //tone(13, hertz, 100);
              
    
     		 } else if (distance < 200) {
        	  analogWrite(9, 255);
          	  delayMicroseconds(2);
              
     		 }
          //ir.resume();
        }else if(results.value == 0xFD30F7){ //리모컨 1번
          Serial.println("1");
        }
        else {
          Serial.println("no sig");
        }
        delayMicroseconds(2);
        ir.resume();
      } //if irdecode 문 
    } //void loop문 닫기

    해당 코드를 수정하고 있지만, loop문을 한 번만 실행하고 있다. 

     

    >> 2020.12.06 추가

    해당 코드에서 if 문의 ir신호를 받는 코드 영역과 그 해당하는 ir값에 따라서 처리하는 소스 코드 부분을 서로 분리하여 실행하게 변경하였다. 기존의 코드는 loop문 안에서 반복을 계속하였고 이것을 마지막에 ir.resum으로 대기 시켰기 때문에 한 번만 실행하였다. 따라서 ir값을 받는 조건을 대기하게 하며, 그 코드를 통해 반복시키는 구간을 생성한다.

     

    댓글 (비로그인 댓글 허용하지 않습니다.)