const int trigPins[] = {2, 3, 4, 5}; // Pin Trigger dei quattro sensori
const int echoPins[] = {6, 7, 8, 9}; // Pin Echo dei quattro sensori
const int buzzerPins[] = {10, 11, 12, 13}; // Pin dei buzzer per i quattro sensori
const int maxDistance = 100; // Distanza massima consentita
void setup() {
Serial.begin(9600);
for (int i = 0; i < 4; i++) {
pinMode(trigPins[i], OUTPUT);
pinMode(echoPins[i], INPUT);
pinMode(buzzerPins[i], OUTPUT);
}
}
int getNoteFromDistance(int distance) {
// Mappa la distanza a una nota musicale in modo inversamente proporzionale
// Ad esempio, puoi utilizzare una funzione logaritmica o esponenziale per calcolare la nota
int note = map(distance, 0, maxDistance, 783, 261);
return note;
}
bool checkDistance() {
bool allSensorsInRange = true;
for (int i = 0; i < 4; i++) {
long duration;
digitalWrite(trigPins[i], LOW);
delayMicroseconds(2);
digitalWrite(trigPins[i], HIGH);
delayMicroseconds(10);
digitalWrite(trigPins[i], LOW);
duration = pulseIn(echoPins[i], HIGH);
int distance = duration / 58.2; // Calcolo della distanza in centimetri
Serial.print("Sensor ");
Serial.print(i);
Serial.print(" Distance: ");
Serial.print(distance);
Serial.println(" cm");
if (distance > maxDistance) {
allSensorsInRange = false;
}
int note = getNoteFromDistance(distance);
tone(buzzerPins[i], note); // Suona la nota corrispondente alla distanza
}
return allSensorsInRange;
}
void loop() {
if (checkDistance()) {
// Suona il buzzer solo se tutti i sensori rilevano un oggetto a meno di 100 cm
// In questo caso, il buzzer suonerà le note calcolate in modo inversamente proporzionale
} else {
// Spegni tutti i buzzer se almeno un sensore rileva una distanza superiore a 100 cm
for (int i = 0; i < 4; i++) {
noTone(buzzerPins[i]);
}
}
delay(100); // Attendere un breve periodo tra le letture
}