超音波+喇叭 範例_感應式電子門鈴

 







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); // 避免頻繁觸發
}




留言