Detecteur recul

Bonsoir,

Aujourd'hui j'ai essayé de simuler un détecteur recul avec un capteur ultrason + Led + Buzzer, le but est est d'allumer la Led et déclencher le buzzer avec un intervalle proportionnelle a la distance d'un obstacle , le seul soucis que j'ai rencontré c'est en cas ou est loin de l'obstacle le delai est grand forcement grand ( je l'ai limité a 1,5 s) et si pendant ce temps on s'approche beaucoup plus de l'obstacle, le capteur ne le détecte pas à cause de l’arrêt de la boucle due à au delai.

voici mon code :

//
#define trig 10 
#define echo 12

long lectureecho; 
long cm;
int y;
int delai;
int led=2;
int buzzer= 6;

void setup() {
  pinMode(trig, OUTPUT); 
  digitalWrite(trig, LOW); 
  pinMode(echo, INPUT); 
  Serial.begin(9600); 
  pinMode(led,OUTPUT);
  pinMode(buzzer,OUTPUT);
}

void loop() {
  digitalWrite(trig,1);
  delayMicroseconds(10);
  digitalWrite(trig,0);
  lectureecho=pulseIn(echo,1);
  cm = lectureecho / 58; 
  
  Serial.print("Distancem : "); 
  Serial.println(cm); 
  

  y=map(cm,0,1000,20,1500);
  delai=constrain(y,0,1500);

  digitalWrite(led,1);
  digitalWrite(buzzer,0);
  delay(delai);
  digitalWrite(led,0);
  digitalWrite(buzzer,1);
  delay(delai);

  

}

Donc est ce qu'il y a meilleur méthode de faire ça , genre garder un intervalle d'une seconde entre 2 détection de la distance ?

Merci pour votre partage

bonjour, pourquoi ne pas mettre le delay en fonction de la distance au lieu de faire un map tel que tu fais à 1m tu as 2*1500, soit 3s entre chaque boucle

//y=map(cm,0,1000,20,1500);
  //delai=constrain(y,0,1500);

  digitalWrite(led,1);
  digitalWrite(buzzer,0);
  delay(cm/2);
  digitalWrite(led,0);
  digitalWrite(buzzer,1);
  delay(cm/2);

de cette facon, ton delay total sera en fonction de la distance 1s pour 100cm 1/2s pour 50cm

On peut aussi (si on a le courage de lire la datasheet du micro et de sortir du confort douillet wiring/arduino) utiliser un timer en mode CTC et une de ses sorties OCxy (celles qui sont appelées PWM mais qui ne font pas que de la PWM) . Il suffit de faire varier la fréquence du signal en modifiant la valeur d'un registre. On vire totalement la fonction delay qui est blocante.

Ou vous pouvez (si vous n'avez pas le courage) utiliser la librairie newping qui a des méthodes adaptées