-
#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값을 받는 조건을 대기하게 하며, 그 코드를 통해 반복시키는 구간을 생성한다.
'개발 > Arduino' 카테고리의 다른 글
아두이노_프로젝트. 04. 아두이노 프로젝트 정리. (0) 2020.12.06 아두이노_프로젝트. 02. 오류. In function `__vector_7':539: (0) 2020.12.02 아두이노_프로젝트. 01. tinkercad-circuits 이용하기 및 설계 (팀) (0) 2020.12.02 댓글 (비로그인 댓글 허용하지 않습니다.)