BASIC4MCU | 질문게시판 | 답변 : 아두이노와 적외선 센서,LED를 이용한 프로그램
페이지 정보
작성자 master 작성일2018-06-26 09:14 조회31,745회 댓글5건본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-06-26 오전 9:14:52// by Ok-Hyun Park//int led1=13;int led2=12;int sensor1=11;int sensor2=10;//void setup(){pinMode(led1,OUTPUT);pinMode(led2,OUTPUT);pinMode(sensor1,INPUT_PULLUP);pinMode(sensor2,INPUT_PULLUP);}//void loop(){while( !digitalRead(sensor1) || !digitalRead(sensor2) ); // 센서가 검출 중이면 대기delay(50);while( digitalRead(sensor1) && digitalRead(sensor2) ); // 센서가 검출 될 때까지 대기delay(50);if( !digitalRead(sensor1) ){ // 1번 센서가 검출되면digitalWrite(led1,HIGH); digitalWrite(led2,LOW); // LED1 ON,LED2 OFF}else{ // 2번 센서가 검출되면digitalWrite(led1,LOW); digitalWrite(led2,HIGH); // LED1 OFF,LED2 ON}}
위의 식대로 해보니 A에서 B로 갈때 LED A가 켜지고
그 상태에서 B에서 A로 돌아올 때 LED A가 꺼지고 LED B가 켜져야되는데 LED의 변화가 없습니다....
문제가 뭔지 수정해주실수 있나요
//
완전히 지나가야 합니다.
또, A->B로 진행 할 때
A를 지나친 후 B를 지나가기 전에 아무 것도 검출되지 않는 구간이 존재한다면 딜레이를 추가해야 합니다.
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-06-26 오전 9:17:32// by Ok-Hyun Park//int led1=13;int led2=12;int sensor1=11;int sensor2=10;//void setup(){pinMode(led1,OUTPUT);pinMode(led2,OUTPUT);pinMode(sensor1,INPUT_PULLUP);pinMode(sensor2,INPUT_PULLUP);}//void loop(){while( !digitalRead(sensor1) || !digitalRead(sensor2) ); // 센서가 검출 중이면 대기delay(500);while( digitalRead(sensor1) && digitalRead(sensor2) ); // 센서가 검출 될 때까지 대기delay(500);if( !digitalRead(sensor1) ){ // 1번 센서가 검출되면digitalWrite(led1,HIGH); digitalWrite(led2,LOW); // LED1 ON,LED2 OFF}else{ // 2번 센서가 검출되면digitalWrite(led1,LOW); digitalWrite(led2,HIGH); // LED1 OFF,LED2 ON}}딜레이를 500으로 늘렸습니다.
필요하다면 딜레이를 더 추가하세요
댓글 5
조회수 31,745CIE18님의 댓글
CIE18 작성일위의 식대로 하면 적외선 센서가 꺼진건지 아예 물체를 인식하질 못합니다.... 위 방식말고 다른 방식으로 코딩이 가능하나요?
master님의 댓글
master 작성일
센서가 반대로 동작하는지 체크 해보세요
int led1=13,led2=12;
int sensor1=11,sensor2=10;
//
void setup(){
pinMode(led1,OUTPUT); pinMode(led2,OUTPUT);
pinMode(sensor1,INPUT);
pinMode(sensor2,INPUT);
}
//
void loop(){
if(digitalRead(sensor1))digitalWrite(led1,HIGH); else digitalWrite(led1,LOW);
if(digitalRead(sensor2))digitalWrite(led2,HIGH); else digitalWrite(led2,LOW);
}
이 소스로 테스트하면 됩니다.
체크 포인트는
1.
센서가 검출되지 않은 상태에서 LED가 켜지는지 꺼지는지
센서가 검출 됬을 때 LED가 켜지는지 꺼지는지
2.
센서가 검출되고나서 물체가 지나가면 LED가 바로 꺼지는지 한참 후에 꺼지는지
CIE18님의 댓글
CIE18 작성일
위의 소스로 테스트했을시
1.
두 센서 다 미검출 = 13번 핀 LED OFF, 12번 핀 LED ON
10번 핀 센서 검출, 11번 핀 센서 미검출 = 두 LED 다 OFF
10번 핀 센서 미검출, 11번 핀 센서 검출 = 13번 핀 LED OFF, 12번 핀 LED ON
두 센서 다 검출 = 두 LED 다 OFF
2.
센서가 검출되고나서 물체가 지나가면(이부분은 이해가 잘안됩니다....물체가 지나가야 센서에 검출되는것 아닌가요...?)LED는 바로 꺼집니다.
저희가 원하는 제품의 매커니즘은
두 센서 다 미검출상태(평소상태) = 12번 핀 LED ON, 13번 핀 LED OFF
물체가 11번 핀에서 10번 핀 순으로 검출될 때(물체가 11번 핀 쪽에서 10번 핀 쪽으로 넘어갈 때)
= 12번 핀 LED OFF, 13번 핀 LED ON
물체가 10번 핀에서 11번 핀 순으로 검출될 때(넘어간 물체가 다시 10번 핀 쪽에서 11번 핀 쪽으로 넘어갈 때)
= 12번 핀 LED ON, 13번 핀 LED OFF
위 무한반복
만들어주신 코딩대로 해보니 센서는 인식이 되는데 물체가 처음에 11번 핀 센서에서 10번 핀 센서로 이동할 때 13번 핀 LED가 켜지는데 다시 물체를 이동시켜봐도 LED는 그상태로 고정이 되더라고요...두번째 주신 코딩은 아예 물체가 센서에 인식이 되지 않고요...도움 부탁드립니다ㅠㅠ
CIE18님의 댓글
CIE18 작성일
아 죄송합니다...처음에 주셨던 코딩으로 해결됬네요ㅋㅋㅋ....점퍼선 불량이었습니다
번거롭게 해드려서 죄송합니다ㅠㅠ
CIE18님의 댓글
CIE18 작성일저 혹시 위의 조건에서 LED만 한개로 해서 적외선센서 A에서 B로 갈때 LED가 켜지고, B에서 A로 갈때는 LED가 꺼지는 식은 어떻게되나요?