BASIC4MCU | 질문게시판 | 아두이노 코딩 두개 합치기
페이지 정보
작성자 CIE18 작성일2018-06-29 06:35 조회12,965회 댓글2건본문
LED와 적외선센서의 상호작용 코딩
(센서1에서 센서2로 물체가 이동할때 LED가 켜짐)
int led=12;
int sensor1=11;
int sensor2=10;
void setup(){
pinMode(led,OUTPUT);
pinMode(sensor1,INPUT_PULLUP);
pinMode(sensor2,INPUT_PULLUP);
digitalWrite(led,LOW);
}
void loop(){
while( !digitalRead(sensor1) || !digitalRead(sensor2) );
while( digitalRead(sensor1) && digitalRead(sensor2) );
if( !digitalRead(sensor1) ){
digitalWrite(led,HIGH);
}
}
LED와 진동센서,스위치의 상호작용 코딩
(진동(압전)센서A0,A1,A2 중 하나라도 진동감지 > LED ON > 스위치 클릭 > LED OFF)
int ledPin = 53; // LED 출력 단자
int piezoPin = A0; // 압전센서 의 아날로그 단자
int piezoPin2= A1; // 압전센서2의 아날로그 단자
int piezoPin3= A2;
int worth = 0; // 현재 측정 된 값
int worth1 = 0; // 압전센서2의 측정된 값
int worth2 = 0;
int buttonpin = 47;int a= 0;
void setup() {
pinMode(ledPin, OUTPUT); // 핀 53번 LED 출력핀 설정
pinMode(buttonpin,INPUT); //47번핀을 입력으로 설정
Serial.begin(9600); // PC로 전송
}void loop() { // 셋팅후 연속적 실행
worth = analogRead(piezoPin); // A1 핀 값을 판독
worth1 = analogRead(piezoPin2); // A2핀 값을 판독
worth2 = analogRead(piezoPin3); // A3핀 값을 판독
int buttoninput = digitalRead(buttonpin);
if ((worth >= 100)||(worth1 >= 100)||(worth2 >= 100)) { // 임계 값 초과시 이벤트 발생
a= 1;
}
if(a==1){
digitalWrite(ledPin, HIGH);
}
if(buttoninput == 1){
a=0;
}if(a==0){
digitalWrite(ledPin,LOW);
}
Serial.println(worth); // PC로 값 보내기
Serial.println(worth1); // PC로 값 보내기
Serial.println(worth2); // PC로 값 보내기
delay(500);}
위의 두 코딩을 합치려고 합니다.
두 코딩을 합친 코딩의 알고리즘은
물체가 적외선센서1에서 2로 지나감+진동센서에 진동감지 > LED ON > LED가 켜진 상태에서 스위치를 누를경우 > LED OFF
코딩을 합쳐보는것을 시도해봤는데 적외선센서 코딩의 while문 때문인지 결과가 잘 나오지 않습니다....어떻게 코딩해야하나요?
댓글 2
조회수 12,965master님의 댓글
master 작성일
와일문 풀어서 시분할 구동으로 만들어드린 소스 참고해서 만들어보세요
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=2082
CIE18님의 댓글
CIE18 작성일
int ledPin = 53; // LED 출력 단자
int piezoPin = A0; // 압전센서 의 아날로그 단자
int piezoPin2= A1; // 압전센서2의 아날로그 단자
int piezoPin3= A2;
int worth = 0; // 현재 측정 된 값
int worth1 = 0; // 압전센서2의 측정된 값
int worth2 = 0;
int buttonpin = 47;
int sensor1=11,sensor2=10;
int mode=0;
int a= 0;
void setup() {
pinMode(ledPin, OUTPUT); // 핀 53번 LED 출력핀 설정
pinMode(buttonpin,INPUT); //47번핀을 입력으로 설정
pinMode(sensor1,INPUT_PULLUP);
pinMode(sensor2,INPUT_PULLUP);
Serial.begin(9600); // PC로 전송
}
void loop() { // 셋팅후 연속적 실행
worth = analogRead(piezoPin); // A1 핀 값을 판독
worth1 = analogRead(piezoPin2); // A2핀 값을 판독
worth2 = analogRead(piezoPin3); // A3핀 값을 판독
int buttoninput = digitalRead(buttonpin);
if ((worth >= 100)||(worth1 >= 100)||(worth2 >= 100)) { // 임계 값 초과시 이벤트 발생
a= 1;
}
if(a==1){
digitalWrite(ledPin, HIGH);
}
if(buttoninput == 1){
a=0;
}
if(a==0){
digitalWrite(ledPin,LOW);
}
if(mode==0){
if(digitalRead(sensor1)&&digitalRead(sensor2)){
mode=1; } // 물체가 없으면
}
else if(mode==1){
if(!digitalRead(sensor1)||!digitalRead(sensor2)){ // 검출 되면
if(!digitalRead(sensor1)){ // 1번 센서가 검출되면
a = 1;
}
else{ // 2번 센서가 검출되면
a = 0;
}
mode=0;
}
}
Serial.println(a); // PC로 값 보내기
Serial.println(mode); // PC로 값 보내기
delay(500);
}
처음에 제시한 두개의 코딩을 위와 같이 합쳐보았습니다.
그런데 센서1에서 센서2로 물체가 이동할 때와 전동 센서값이 100 이상으로 나올때 LED가 켜지지 않네요...
뭐가 문제인지 알려주실수 있나요