// 腳位定義
const int trigPin = 7; // 超音波感測器 Trig 腳位
const int echoPin = 6; // 超音波感測器 Echo 腳位
const int buzzerPin = 8; // 蜂鳴器腳位
// 音階頻率對應表
int notes[] = {261, 294, 329, 349, 392, 440, 493}; // C D E F G A B
// 取得距離(單位:公分)
long getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
long distance = duration * 0.034 / 2;
return distance;
}
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600); // 顯示距離用
}
void loop() {
long distance = getDistance();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
if (distance > 70 || distance <= 0) {
noTone(buzzerPin); // 超過範圍或無效值則靜音
} else {
int index = distance / 10; // 每 10cm 對應一個音階
tone(buzzerPin, notes[index]);
}
delay(200); // 更新頻率間隔
}
留言
張貼留言