// 출처 : bing.com
// 라이센스 : MIT LICENCE
const int trigPin = 9;
const int echoPin = 10;
const int buzzerPin = 11;
int setup_maxDistance = 100;
unsigned long previousMillis = 0;
bool buzzerState = false;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 29.1;
int interval = map(distance, 0, setup_maxDistance, 50, 400);
if (distance < setup_maxDistance) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
buzzerState = !buzzerState;
if (buzzerState) {
tone(buzzerPin, 1000);
} else {
noTone(buzzerPin);
}
}
} else {
noTone(buzzerPin);
buzzerState = false;
}
}