BASIC4MCU | 질문게시판 | 답변 2: 아두이노와 적외선 센서,LED를 이용한 프로그램
페이지 정보
작성자 master 작성일2018-06-27 09:10 조회13,035회 댓글3건본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-06-27 오전 9:13:05// by Ok-Hyun Park//int led1=13;int sensor1=11;int sensor2=10;//void setup(){pinMode(led1,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); // LED1 ON}else{ // 2번 센서가 검출되면digitalWrite(led1,LOW); // LED1 OFF}}
LED 1개로 할 때는 LED2 코드를 삭제하면 됩니다.
댓글 3
조회수 13,035CIE18님의 댓글
CIE18 작성일
많은 도움 감사합니다^^
위의 조건에서 적외선 센서를 4개(A1,A2,B1,B2)로 늘려 물체가 센서 A1,A2에서 센서 B1,B2를 지나가는 과정에서 A1,A2중 둘 중 한개라도 인식되면 LED ON이 되고 다시 센서 B1,B2에서 센서 A1,A2를 지나가는 과정에서 B1,B2중 둘 중 한개라도 인식되면 LED OFF가 되게 하려고 합니다.
모든 경우의 수를 작성해보면,
물체가 센서 A1,A2에서 B1,B2로 이동할 때
A1 인식 A2 불인식 > B1 인식 B2 불인식 = LED ON
> B1 불인식 B2 인식 = LED ON
> B1 인식 B2 인식 = LED ON
A1 불인식 A2 인식 > B1 인식 B2 불인식 = LED ON
> B1 불인식 B2 인식 = LED ON
> B1 인식 B2 인식 = LED ON
A1 인식 A2 인식 > B1 인식 B2 불인식 = LED ON
> B1 불인식 B2 인식 = LED ON
> B1 인식 B2 인식 = LED ON
물체가 센서 B1,B2에서 A1,A2로 이동할 때
B1 인식 B2 불인식 > A1 인식 A2 불인식 = LED OFF
> A1 불인식 A2 인식 = LED OFF
> A1 인식 A2 인식 = LED OFF
B1 불인식 B2 인식 > A1 인식 A2 불인식 = LED OFF
> A1 불인식 A2 인식 = LED OFF
> A1 인식 A2 인식 = LED OFF
B1 인식 B2 인식 > A1 인식 A2 불인식 = LED OFF
> A1 불인식 A2 인식 = LED OFF
> A1 인식 A2 인식 = LED OFF
이것에 대한 코딩식은 어떻게 되나요...?
master님의 댓글
master
물체가 센서 A1,A2에서 B1,B2로 이동할 때 <-- 이 것만 생각해보면
A1,A2 둘 중의 하나이상 인식 --> B1,B2 둘 중의 하나 이상 인식 = LED ON
반대의 경우(B1,B2-->A1,A2 이동)도 마찬가지로
B1,B2 둘 중의 하나이상 인식 --> A1,A2 둘 중의 하나 이상 인식 = LED OFF
master님의 댓글
master
//
int led1=13;
int SA1=11,SA2=10,SB1=9,SB2=8;
//
void setup(){
pinMode(led1,OUTPUT);
pinMode(SA1,INPUT_PULLUP); pinMode(SA2,INPUT_PULLUP);
pinMode(SB1,INPUT_PULLUP); pinMode(SB2,INPUT_PULLUP);
}
//
void loop(){
while( !digitalRead(SA1) || !digitalRead(SA2) || !digitalRead(SB1) || !digitalRead(SB2) ); // 센서가 검출 중이면 대기
delay(50);
while( digitalRead(SA1) && digitalRead(SA2) && digitalRead(SB1) && digitalRead(SB2)); // 센서가 검출 될 때까지 대기
delay(50);
if( !digitalRead(SA1) || !digitalRead(SA2) ){ // A 센서가 검출되면
digitalWrite(led1,HIGH); // LED1 ON
}
else{ // B 센서가 검출되면
digitalWrite(led1,LOW); // LED1 OFF
}
}
코드는 동일합니다.
A로 진입했을 때 LED가 바로 켜집니다. B를 빠져나가기 전에 미리 켜지는 것이죠
B로 진입했을 때 LED가 바로 꺼집니다. A를 빠져나가기 전에 미리 꺼지는 것인데
어차피 한번 진행하면 반드시 통과 하는 것으로 가정을 했으므로 문제는 생기지 않을겁니다.
A를 들어오면 B를 빠져나갈 때까지 기다린 후에 키거나
B를 들어오면 A를 빠져나갈 때까지 기다린 후에 끄거나 하는 것은
코드를 추가하면 되지만(while문)
알고리즘 상 중요한 것은 아니죠