float distance, temps;//Variables distance et temps
int TRIG = 3, ECHO = 4, Buzz = 8;//Définition des bornes E/S numériques
void setup() {
// put your setup code here, to run once:
pinMode(TRIG, OUTPUT);//Borne de déclenchement de l'émission des US
pinMode(ECHO, INPUT);//Borne de réception de l'echo
digitalWrite(TRIG, 0);//Réglage initial de la borne de déclenchement
noTone(Buzz);//On coupe le son
}
void beep(unsigned int freq, unsigned long duree) {
/*Cette fonction génère un bip régulier dont on peut choisir la
fréquence et le rythme : duree en millisecondes
*/
tone(Buzz, freq, duree);
delay(duree);
noTone(Buzz);
delay(duree);
}
void loop() {
// put your main code here, to run repeatedly:
//Déclenchement mesure
digitalWrite(TRIG, 1);
delayMicroseconds(10);
digitalWrite(TRIG, 0);
//Mesure et calcul de la distance en mètres.
temps = pulseIn(ECHO, 1, 30000);//Durée de l'aller-retour en µs
distance = 0.5 * 340.0 * temps / 1000000.0;
/*On génère des bips différents selon la distance mesurée
On peut affiner les intervalles si besoin.
*/
if (temps == 0) {
//temps vaut 0 si on ne détecte pas d'obstacle. Dans ce cas, on ne joue pas de son
noTone(Buzz);
}
else if (distance <= 0.10) {
tone(Buzz, 440); //Son émis en continu.
}
else if (distance <= 0.15) {
beep(440, 50);
}
else if (distance <= 0.20) {
beep(440, 100);
}
else if (distance <= 0.30) {
beep(440, 200);
}
else if (distance <= 0.40) {
beep(440, 400);
}
else {
noTone(Buzz);//Si la distance est supérieure à 40cm, on ne fait rien.
}
}