BASIC4MCU | 질문게시판 | 빨간불일때만 작동하게 하려는데
페이지 정보
작성자 daaa 작성일2022-11-23 00:22 조회905회 댓글1건본문
안녕하세요
빨간색, 초록색으로만 신호등을 구성하고
노란색은 깜빡임의 빈도로 물체와의 거리를 알려주는 것으로 설정했습니다.
빨간불일 때 : 초음파 센서가 측정한 거리에 따라 노란불빛의 깜빡임 빈도 조절 + 10cm 이하이면 부저가 울린다
이렇게 코딩을 해봤는데 if문에서 잘못된건지 .. 빨간불일 때 아무것도 작동이 안되네요ㅜㅜ 어디가 잘못된 것일까요?
int echoPin = 12;
int trigPin = 13;
int YELLOW=3, RED=4, GREEN=5, speakerpin=8;
void setup(){
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(YELLOW, OUTPUT);
}
void loop(){
digitalWrite(trigPin, LOW);
digitalWrite(echoPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
unsigned long duration = pulseIn(echoPin, HIGH);
float distance = ((float)(340*duration)/10000)/2;
Serial.print(distance);
Serial.println("cm");
digitalWrite(RED,HIGH);
delay(5000);
digitalWrite(RED,LOW);
digitalWrite(GREEN,HIGH);
delay(5000);
digitalWrite(GREEN,LOW);
delay(5000);
if(RED==HIGH){
if(distance<10){
digitalWrite(YELLOW,HIGH);
delay(50);
digitalWrite(YELLOW,LOW);
delay(50);
tone(speakerpin,500,1000);
}
else if(distance>=10 &&distance<20){
digitalWrite(YELLOW,HIGH);
delay(100);
digitalWrite(YELLOW,LOW);
delay(100);
}
else if(distance>=20 &&distance<30){
digitalWrite(YELLOW,HIGH);
delay(300);
digitalWrite(YELLOW,LOW);
delay(300);
}
else {
digitalWrite(YELLOW,LOW);
}
}
}
댓글 1
조회수 905master님의 댓글
master 작성일
딜레이 동안에는 아무 것도 하지 않습니다.
예를들면
digitalWrite(RED,HIGH);
delay(5000);
digitalWrite(RED,LOW);
적색이 5초동안 켜진 후 꺼지는데요
이 사이에 초음파센서를 5번 읽고 싶다면
digitalWrite(RED,HIGH);
for(int i=0;i<5;i++){ delay(1000); 초음파센서읽어서 처리하기(); }
digitalWrite(RED,LOW);
만약 50번 읽고 싶다면
digitalWrite(RED,HIGH);
for(int i=0;i<50;i++){ delay(100); 초음파센서읽어서 처리하기(); }
digitalWrite(RED,LOW);
초음파센서 읽는 부분이나, 거리에 따른 처리를 하는 부분은 함수로 만들면 편할 수도 있습니다.