Quand une certaine distance est détectée faire clignoter la lampe

Bonjour.
J'essaie de faire un programme qui fais clignoté une lampe rouge si le Capteur de contacte détecte une certaine distance. Le problème est que mon programme répète indéfiniment le clignotement
Voici le programme :

Post mis dans la mauvaise section, on parle anglais dans les forums généraux, je viens de déplacer le post dans la section francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone".

c'est un détecteur de distance ou un détecteur de présence ?

C'est un détecteur de présence

image

Le capteur entre sur une broche digitale, qui retourne une valeur LOW ou HIGH et tu testes une valeur numérique, 5. Cela ne peut pas fonctionner.

Donne plus d'informations sur le capteur en question.

ok merci comment je pourrai régler cela ?

Le capteur en question ressemble a ça :

OK donc ce capteur retourne effectivement une distance.
image

Mais est-ce que l'instruction que tu utilises te retourne bien cette distance?
Je ne connais pas trop comment fonctionne ce générateur de code mais telle que je la comprends cette instruction semble retourner un état logique pas une distance.

Ce capteur doit recevoir une impulsion sur son entrée TRIG pour commencer une mesure est-ce fait automatiquement lorsque tu demandes la lecture du capteur?

As-tu essayé de faire imprimer la valeur retournée par cette instruction pour voir si tu récupères bien une distance?

Si je résume ce qui se passe quand je lance le programme même si le capteur ne détecte rien la lampe clignote quand même

Oui, ça on l'a compris. C'est parce que la valeur retournée est toujours inférieure à 5.

Mais cela n'explique pas si ton code utilise correctement le capteur qu'y-a-t-il derrière l'instruction?
image

Je peux directement montre le code
c'est le code complet

Pas de copie d'écran, s'il te plait. Les personnes qui répondent depuis leur téléphone ne peuvent pas lire le code.
Faire un copié/collé du code complet et le placer entre les balises code comme demandé dans "Les bonnes pratiques du forum francophone" et les appliquer.

En particulier, la mise en forme du code avec des balises en cliquant sur l'icône <code/>

Vous n’utilisez pas la bonne instructions je pense, vous n’avez pas un bloc pour un capteur ultrason ?

Oui c’est ça : il faut prendre le bloc mesure de distance, pas détection de présence.
Je regarde les détails si je trouve du matériel équivalent chez mes collègues de techno au collège ce matin.


C'est plutôt ça qu'il faut faire. Attention, la distance renvoyée est en cm.

(c'est fait avec mblock et inventorkit, mais je suppose que c'est à peu-près pareil pour ce qu'utilise @pika5478 )

Edit : pas testé mais de mémoire, le capteur d'inventorkit (et peut-être d'autres) sont limités à 2 ou peut-être 4 m mais de toute façon, Pika ne semble pas préciser l'unité de son 5...

ok desole

Je te suggère de commencer avec l'exemple du HC-SR04 qui est fourni dans Arduino-IDE lorsque tu installes la bibliothèque du module.
Ce fichier d'exemple te fournira le code de base pour lire les valeurs retournées par le module. Ces valeurs sont numériques et faciles à comprendre. J'utilise moi-même quelques-uns de ces modules et les distances retournées sont en centimètres.

Lorsque tu auras maîtrisé les retours du module, il sera très facile de faire une condition
si plus grand que. éteindre
si plus petit que: clignoter

Afin d'éviter le clignotement à à l'infini, il faut connaître l'état (allumé ou éteint) de la DEL et intégrer le clignotement dans la boucle loop.
Je suggère quelque chose comme ceci:

bool etat = false;
int duree = 1000;  //millisecondes de clignotement
int actu = millis();
int PINdel = 3;

setup() {
pinMode(PINdel, OUTPUT);
}

loop () {

  if (distance > 55) {
         if (millis() - actu > duree) {
              if (etat) {
                     digitalWrite(PINdel LOW); 
                    etat = false;
              } else {
                    digitalWrite(PINdel HIGH; 
                    etat = true;
              }
              actu = milllis();
         }
  } else {
    digitalWrite(PINdel LOW); 
  }

}

Puisque ton code est illisible, j'ai créé ici du neuf.

@Patriboom

Vous voyez bien qu’il ne programme pas en C++ mais avec un outil de programmation par bloc…

Bonjour @Patriboom

Je crois qu'il manque quelque chose ici :arrow_right: le type de retour de la fonction


Pour stocker la valeur de millis, mieux vaut prendre plus grand qu'un int (unsigned long conviendrait mieux je pense)


Petite faute de frappe :slight_smile:


digitalWrite attend deux paramètres, qu'il faut séparer par une virgule :arrow_right:

digitalWrite(PINdel, LOW); 

digitalWrite(PINdel HIGH; devient digitalWrite(PINdel, HIGH);


+1 :+1:

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.