const int trigPin = 4; const int echoPin = 3; const int piezoPin = 6; const int ledPin = 7; int distance; int duration; void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(piezoPin, OUTPUT); pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH,10000); // added a timeout of 10000 to avoid 0 value distance = duration * 0.034 / 2; if (distance != 0){ // added a check if the distance is not 0 Serial.print("Distance: "); Serial.println(distance); } if (distance < 30 && distance != 0) { digitalWrite(ledPin, HIGH); playToccata(); Serial.println("Playing Toccata and Fugue in D Minor"); } else { noTone(piezoPin); digitalWrite(ledPin, LOW); } delay(100); } void playToccata() { int note[] = { 659, 622, 659, 622, 659, 494, 587, 523, 622, 659, 622, 659, 622, 494, 587, 392, 330, 294, 262, 330, 392, 440, 494, 523, 587, 659, 622, 659, 622, 659, 494, 587, 523, 622, 659, 622, 659 }; int tempo[] = { 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12 }; for (int i = 0; i < sizeof(note)/sizeof(note[0]); i++) { int duration = tempo[i] * 30; tone(piezoPin, note[i], duration); delay(duration); if (i == sizeof(note)/sizeof(note[0]) - 1) { noTone(piezoPin); } } }