BASIC4MCU | 질문게시판 | 초음파 센서 버튼 온오프
페이지 정보
작성자 GAWB 작성일2020-12-02 16:42 조회2,911회 댓글0건본문
초음파 센서를 버튼 누르면 아예 부저에 소리가 안울리게 하고싶습니다.
그리고 안울리는 상태에서 버튼을 한번 또 누르면 부저가 울리는 코드를 짜고 있었는데 너무 어렵습니다. 도와주세요.
/// defines pins numbers
const int TRIG = 9;
const int ECHO = 10;
const int LED = 6;
const int SPEAKER = 12;
const int START_BUTTON = 5;
// defines variables
long duration;
int distance;
int note;
int flag1=0;//상황변화에 관한 값 저장
int flag2=0;
int state=0;// state변수 선언
void setup() {
pinMode(TRIG, OUTPUT); //트리거 핀 출력으로 설정
pinMode(ECHO, INPUT); //에코 핀 입력으로 설정
pinMode(LED, OUTPUT); //LED 핀 출력으로 설정
pinMode(SPEAKER, OUTPUT); //LED 핀 출력으로 설정
pinMode(START_BUTTON, INPUT);
Serial.begin(9600); //Starts the serial communication
}
void loop() {
flag1 = digitalRead(START_BUTTON);//버튼의 상태의 flag에 저장한다.
//--------------------------------------------------------------------------
digitalWrite(TRIG, LOW); //트리거 핀 초기화, 2us 정도 작동준비할 시간 줌
delayMicroseconds(2);
digitalWrite(TRIG, HIGH); //트리거 핀에 10us 동안 High 신호를 주어야 초음파센서가 초음파를 쏨
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
duration = pulseIn(ECHO, HIGH); //에코 핀에 몇초만에 초음파가 돌아왔는지를 읽음;
// Calculating the distance
distance= duration/58; //시간을 Cm로 환산하는 식
note = (100 - distance + 200)*10;
Serial.print("Distance: ");
Serial.print(distance);
Serial.print("cm");
Serial.println();
//--------------------------------------------------------------------------
if((flag1 = HIGH) && (flag2 == LOW)) { //flag1이 켜져있고 flag2가 꺼져있다면
state = 1 - state;
delay(10);
}
flag2 = flag1;
if(state == 1) {//1이면 키고
if(distance>250)
analogWrite(LED,0); //거리 2.5M 이상일 시 LED 소등
else if(distance>100)
analogWrite(LED,128); //거리 2.5M 이하 1M 이상일 시 LED 반틈 밝기로 점등
else {
if(digitalRead(START_BUTTON) == LOW){
analogWrite(LED,255); //거리 1M 이하일 시 LED 완전한 밝기로 점등
tone(SPEAKER,note,1000);
}
}
}
else{//아니면 끄고
analogWrite(LED,LOW);
digitalWrite(SPEAKER, LOW);
}
//--------------------------------------------------------------------------
}
//
//delay(10);
//
//}
//else {
// digitalWrite(LED,LOW);
//}
//
댓글 0
조회수 2,911등록된 댓글이 없습니다.