超音波體感樂器

 

// 腳位定義

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); // 更新頻率間隔

}

留言