const int trigPin = 7; // 超音波感測器 Trig 腳位
const int echoPin = 6; // 超音波感測器 Echo 腳位
const int speakerPin = 9; // 3W 喇叭腳位
const int triggerDistance = 100; // 音樂觸發距離 (公分)
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;
}
// 🎶 簡化版馬利兄弟音效 (示範)
int melodyMario[] = {330, 330, 392, 330, 440, 494, 523, 330};
int noteDurations[] = {200, 200, 400, 400, 400, 400, 400, 800};
void playMelody(int melody[], int noteDurations[], int noteCount) {
for (int i = 0; i < noteCount; i++) {
tone(speakerPin, melody[i], noteDurations[i]);
delay(noteDurations[i] + 50);
}
noTone(speakerPin);
}
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(speakerPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
long distance = getDistance();
if (distance < triggerDistance) {
playMelody(melodyMario, noteDurations, 8); // 播放音效
}
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(1000); // 避免頻繁觸發
}
留言
張貼留言