BASIC4MCU | 질문게시판 | 답변 2: 아날로그 진동센서를 이용한 코딩에서 디지털 진동센서를 이용한 코딩으로 바꾸기
페이지 정보
작성자 master 작성일2018-06-30 21:49 조회7,883회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=2108
본문
LED 구동 위치가 위에 있으면 문제가 됩니다.제일 아래(딜레이 위 또는 시리얼 전송 위)에서 LED를 구동해야합니다.//알고리즘을 만드셔야 하는데요현재 3종류의 센서가 있습니다.3개의 진동센서, 1개의 버튼, 2개의 적외선센서이 3종류의 입력으로 1개의 LED를 키고 있는데요이렇게 각자 체크해서 LED를 건드려서는 절대로 원하는대로 키지 못합니다.총 6개의 센서 동작을 한꺼번에 정의해서 LED를 구동하세요//
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-06-30 오후 9:28:18// by Ok-Hyun Park//int ledPin=53; // LED 출력 단자int piezoPin =A0; // 진동센서 의 아날로그 단자int piezoPin1=A1; // 진동센서1의 아날로그 단자int piezoPin2=A2; // 진동센서2의 아날로그 단자//int buttonpin=47;int sensor1=11,sensor2=10; //적외선 센서1과 적외선 센서2를 각각 11,10번에 연결//int mode=0,worth=0,worth1=0,worth2=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 =digitalRead(piezoPin); Serial.print("worth"); Serial.println(worth);worth1=digitalRead(piezoPin2); Serial.print("worth1"); Serial.println(worth1);worth2=digitalRead(piezoPin3); Serial.print("worth2"); Serial.println(worth2);//int buttoninput=digitalRead(buttonpin);//if(buttoninput==1){ digitalWrite(ledPin,LOW); } // 스위치를 누르면 불이 꺼짐else if(worth||worth1||worth2){digitalWrite(ledPin,HIGH); } // 스위치를 누르지 않은 상태에서 기울기 센서 출력이 있다면else{if(mode==0){if(digitalRead(sensor1)&&digitalRead(sensor2)){ mode=1; } // 센서1과 2에 물체가 감지 되지 않으면 mode=1로 초기화}else if(mode==1){if(!digitalRead(sensor1)||!digitalRead(sensor2)){ // 검출 되면if(!digitalRead(sensor1)){ // 1번 센서가 검출되면digitalWrite(ledPin,HIGH); // LED ON}else{ // 2번 센서가 검출되면digitalWrite(ledPin,LOW); // LED OFF}mode=0;}}}//delay(500);}
예를들면
이 소스에서는
if else if else 문으로 체크 우선 순위를 주고 있습니다.
스위치가 가장 우선권이 있고요
스위치를 누른 상태에서는 LED를 끄며, 나머지 센서는 무시 합니다.
기울기 센서가 그다음 우선권이 주어지는데요
적외선 센서 상관없이 기울기 센서값이 오면 LED를 킵니다.
마지막 else는 우선권이 가장 낮은데요
스위치를 누르기 않고, 기울기센서 출력도 모두 0일 때만 적외선 센서를 체크합니다.
//
알고리즘을 잘 작성하셔야 합니다.
댓글 0
조회수 7,883등록된 댓글이 없습니다.