//초음파센서 trig, echo핀 설정
const int distTrigPin = 2;
const int distEchoPin = 3;
//3색 LED 핀 설정
const int ledRedPin = 11;
const int ledGreenPin = 10;
const int ledBluePin = 9;
void setup() {
pinMode(distTrigPin, OUTPUT);
pinMode(distEchoPin, INPUT);
}
void loop() {
analogWrite(ledRedPin, 0);
analogWrite(ledGreenPin, 0);
analogWrite(ledBluePin, 0);
//거리 측정
digitalWrite(distTrigPin, HIGH); //스위치 온
// 1sec = 1000 ms, 1ms = 1000 microSec
delayMicroseconds(10);
digitalWrite(distTrigPin, LOW); //잠깐 쉬고 바로 꺼줌
//pulseIn: pin이 HIGH가 될 때까지의 시간을 구함
//최대 1초까지 대기, 대기 중 HIGH가 안된다면 0으로 반환
long duration = pulseIn(distEchoPin, HIGH);
if(duration == 0) {
return;
}
// 29.1를 나누면 cm단위, 왕복이기 때문에 58.2
long distance = duration / 58.2;
if(distance < 10) {
analogWrite(ledRedPin, 255);
}
else if(distance < 20) {
analogWrite(ledGreenPin , 255);
}
else if(distance < 30) {
analogWrite(ledBluePin , 255);
}
delay(100);
}
영상
알게된 점 - 초음파센서 거리 측정 과정 1) 초음파 센서의 trigger에서 초음파 발사 2) 발사된 초음파 사물에 반사 3) 반사되어 나온 초음파 echo에서 받아서 거리 측정
- echo의 기본값은 LOW, 초음파 받으면 HIGH로 변경(HIGH가 될 때까지 시간을 계산해 거리를 측정) - trigger에서 초음파를 날린 후 짧은 시간(microSec) 안에 바로 꺼줘야 정확한 측정 가능
- pulseIn(p1, p2) 1) p1번호의 pin이 p2상태가 될 때까지의 시간을 구함 2) 기본적으로 최대 1초까지 대기하지만, 1초가 넘어가도 상태가 변하지 않는 경우 경우 0을 반환 3) pulseIn에서 구한 값을 29.1로 나누면 cm값을 구할 수 있음(초음파 센서는 왕복이므로 58.2를 나눔)