IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Radar de recul automobile


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2020
    Messages : 21
    Par défaut Radar de recul automobile
    Bonjour à tous. Je m'initie à l'arduino et je veux réaliser un radar de recul automobile paramétrable.
    J'ai fait fonctionner un capteur mais pour en rajouter un autre j'ai du mal à voir comment je les rends sélectifs. De plus je veux en mettre 4 !!
    Merci de m'apporter votre aide. Je suis débutant dans l'Arduino donc soyez indulgents !!
    Voivi le code de départ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    #define echoPin 8 // déclaration de la Pin Echo sur la broche 8 de la carte arduino
    #define trigPin 9 // déclaration de la Pin Trigger sur la broche 9 de la carte arduino
    #define echoPin1 11 // déclaration de la Pin Echo sur la broche 11 de la carte arduino
    #define trigPin1 12 // déclaration de la Pin Trigger sur la broche 12 de la carte arduino
     
    float k; // déclaration de la variable " k " qui est égale à ( 1/2 * vitesse * cos Q ) de type réel (float)
    float dist; // déclaration de la variable " dist " de type réel (float)
    float tmoy; // déclaration d'une variable " tmoy " de type réel (float)
    float Vit = 340.5; // déclaration de la variable " Vit " de type réel (float) et de valeur 340.5
     
    int duree; // déclaration de la variable " duree " de type entier (integer)
    int tmin = 32767; // déclaration de la constante "tmin" de valeur 32767 de type entier (integer) qui est la valeur maximale d'un entier positif signé (15 bits --> 32767 = 2^15 - 1)
    int tmax = 0; // déclaration de la constante " tmax " de type entier (integer) et de valeur 0
    int dmax = 80; // déclaration de la constante " dmax " de valeur 80 cm de type entier (integer)
    int dmin = 15; // déclaration de la constante " dmin " de valeur 15 cm de type entier (integer)
    int BUZZER = 10; // déclaration de la Pin de l'avertisseur sonore " BUZZER " sur la broche 10 de la carte arduino
     
     
    void setup() // fonction setup - début de l'exécution du programme et définition des entrées et des sorties
    {
      pinMode(trigPin, OUTPUT); // déclaration de la pin trig comme étant une étant une sortie
      pinMode(echoPin, INPUT); // déclaration de la pin echo comme étant une étant une entrée
      pinMode(trigPin1, OUTPUT); // déclaration de la pin trig comme étant une étant une sortie
      pinMode(echoPin1, INPUT); // déclaration de la pin echo comme étant une étant une entrée
      pinMode(BUZZER, OUTPUT); // déclaration de la pin du buzzer comme étant une sortie
     
      k = Vit / 20000;
      /*la valeur retournée par pulseIn est en microsecondes et la valeur de la vitesse est en m/s c'est pour cela qu'on a divisé la valeur de k par 10000 afin d'avoir la valeur en cm
        et ensuite on a redivisé la valeur de k par 2 pour n'avoir qu'un trajet*/
    }
     
     
    void loop() // s'exécute le programme en boucle sans fin
    {
      tmin = 32767; // on définit la valeur de "tmin" à 32767
      tmax = 0; // on définit la valeur de "tmax" à 0
     
      /*on a redéfinit les valeurs de MinDur et MaxDur pour que ces deux variables prennent les valeurs de 32767 et 0 pendant chaque exécution de la fonction " loop " */
     
      for (int i = 0; i < 10; i++) // pour chaque nouvelle mesure , on va calculer la durée d'aller retour de l'onde 20 fois pour s'assurer de la valeur calculer par le capteur
      {
        digitalWrite(trigPin, LOW); // mettre la pin trig en niveau bas " 0 logique " ( 0 volt )
        delayMicroseconds(2); // niveau bas de la pin trig pendant 2 microsecondes pour garantir une impulsion HIGH propre
        digitalWrite(trigPin, HIGH); // mettre la pin trig en niveau haut " 1 logique " ( 5 volts )
        delayMicroseconds(10); // le capteur est déclenché par une impulsion émettrice HIGH de 10 microsecondes
        digitalWrite(trigPin, LOW); // mettre la pin trig en niveau bas " 0 logique " ( 0 volt )
        duree = pulseIn(echoPin, HIGH); // la fonction pulseIn attend que la broche echoPin passe au niveau HAUT,c'est à dire la réception d'une onde sur l'echo du capteur ultrasonique HC-04
     
        /*on va tesrer si la valeur de la durée est toujours dans la plage de mesure adéquate qui sera entre 0 et 32767*/
     
        if (duree > tmax)
        {
          tmax = duree;
        }
        else if (duree < tmin)
        {
          tmin = duree;
        }
     
        delay(50);// on fait un temps d'attente pour éviter les échos parasites
     
        /* ces tests sont faits pour s'aapprocher au maximum de la valeur réelle de la durée d'aller-retour de l'onde et de s'assurer que la valeur de la durée soit positive
          pour ensuite calculer la distance qui sera impérativement de valeur positive*/
      }
     
      tmoy = (tmax + tmin) / 2;
      /*on a déterminé les valeurs de tmax et tmin aprés 10 mesures successives et de la on va calculer la distance à partir de la formule
        Distance = k (vitesse) * durée (temps d'aller retour de l'onde) ,tout on fesant la moyenne de tmax et tmin afin d'approximer la valeur exacte de la durée d'aller retour de l'onde*/
      dist = tmoy * k;
     
     
     
      if (dist <= dmin) // si distance <= dmin (15cm) 
      {
        tone(BUZZER, 1000, 1000); // declanchement de l'avertisseur sonore
     
      }
      if ((dist >= dmin) and (dist <= dmax))// si distance >= dmin (15cm) et distance <= dmax(80cm)
     
      {
        tone(BUZZER, 500, 150); // declanchement de l'avertisseur sonore
     
      }
    }

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 918
    Par défaut
    quel type de capteur ? si c'est à ultra-son (à en juger par trigPin et echoPin) il faudra les déclencher les uns après les autres après un petit temps d'attente pour ne pas que vous soyez "pollué" par des rebonds ou emissions des autres capteurs.

    (la bibliothèque newPing vous simplifiera la vie)

  3. #3
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2020
    Messages : 21
    Par défaut
    Merci pour votre réponse. Le capteur (ou les capteurs) sont des SR04T

    Nom : xcsource-capteur-etanche-transducteur-mesure-dista.jpg
Affichages : 387
Taille : 52,5 Ko

    Je ne maîtrise pas les bibliothèques. Que faut-il que je fasse avec la bibliothèque ?
    Merci encore pour votre réponse.

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 918
    Par défaut
    Si vous lisez l’anglais il y’a un tuto assez complet ici (ou un coup de google translate) qui part de la base puis introduit la bibliothèque newping

    Pour comprendre ce qu’est une bibliothèque (library), l’article de locoduino est un bon résumé

  5. #5
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2020
    Messages : 21
    Par défaut
    Ok merci je regarde ça.

  6. #6
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2020
    Messages : 21
    Par défaut
    Intéressant vos liens.

    voilà j'ai établi un programme pour 2 capteurs mais je peux aller jusqu'à 10. En fait j'irai jusqu'à 4.
    J'ai bien les distances de chaque capteur qui sont mesurées sur le moniteur série et qui déroule.
    Maintenant il faut que je fasse bipper mon buzzer lorsque je suis dans un intervalle défini.

    Voici mon code actuel (sans le buzzer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    #include <NewPing.h>
     
    #define SONAR_NUM     2 // Nombre de capteurs.
    #define MAX_DISTANCE 150 // Distance maximale (en cm) de ping.
    #define PING_INTERVAL 33 // Millisecondes entre les pings du capteur (29 ms est environ la minute pour éviter l'écho croisé du capteur).
     
    unsigned long pingTimer[SONAR_NUM]; // Contient les heures auxquelles le prochain ping doit se produire pour chaque capteur.
    unsigned int cm[SONAR_NUM];         // Où les distances de ping sont stockées.
    uint8_t currentSensor = 0;          // Enregistre le capteur actif.
     
    NewPing sonar[SONAR_NUM] = {     // Réseau d'objets de capteur.
      NewPing(9, 8, MAX_DISTANCE), // La broche de déclenchement, la broche d'écho et la distance maximale de chaque capteur pour le ping.
      NewPing(12, 11, MAX_DISTANCE),
     
    };
     
    void setup() {
      Serial.begin(115200);
      pingTimer[0] = millis() + 75;           // Le premier ping commence à 75 ms, donne le temps à l'Arduino de se refroidir avant de commencer.
      for (uint8_t i = 1; i < SONAR_NUM; i++) // Réglez l'heure de démarrage de chaque capteur.
        pingTimer[i] = pingTimer[i - 1] + PING_INTERVAL;
    }
     
    void loop() {
      for (uint8_t i = 0; i < SONAR_NUM; i++) { // Parcourir tous les capteurs.
        if (millis() >= pingTimer[i]) {         // Est-il temps pour ce capteur de faire un ping.
          pingTimer[i] += PING_INTERVAL * SONAR_NUM;  // Réglez la prochaine fois que ce capteur recevra un ping.
          if (i == 0 && currentSensor == SONAR_NUM - 1) oneSensorCycle(); // Cycle de ping du capteur terminé, faites quelque chose avec les résultats.
          sonar[currentSensor].timer_stop();          // Assurez-vous que la minuterie précédente est annulée avant de commencer un nouveau ping (assurance).
          currentSensor = i;                          // Capteur en cours d'accès.
          cm[currentSensor] = 0;                      // Rendre la distance nulle au cas où il n'y aurait pas d'écho ping pour ce capteur.
          sonar[currentSensor].ping_timer(echoCheck); // Faites le ping (le traitement continue, l'interruption appellera echoCheck pour rechercher un écho).
        }
      }
      // Un autre code qui * N'ANALYSE PAS * les résultats de ping peut aller ici.
    }
     
    void echoCheck() { // ISi un ping est reçu, définissez la distance du capteur sur la matrice.
      if (sonar[currentSensor].check_timer())
        cm[currentSensor] = sonar[currentSensor].ping_result / US_ROUNDTRIP_CM;
    }
     
    void oneSensorCycle() { // Cycle de ping du capteur terminé, faites quelque chose avec les résultats.
      // Le code suivant serait remplacé par votre code qui fait quelque chose avec les résultats du ping.
      for (uint8_t i = 0; i < SONAR_NUM; i++) {
        Serial.print(i);
        Serial.print("=");
        Serial.print(cm[i]);
        Serial.print("cm ");
      }
      Serial.println();
    }
    Quelle serait la suite pour le buzzer et quel paramètre dois-je utiliser pour établir la détection? Merci.
    Marc

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 918
    Par défaut
    Salut
    Maintenant il faut que je fasse bipper mon buzzer lorsque je suis dans un intervalle défini.
    Les capteurs se déclenchent les uns à la suite des autres à 75ms d'intervalle pour ne pas être perturbés par les ondes du précédent - donc avec 4 capteurs cette fonction sera appelée environ toutes les 4x75ms = 300ms - soit à peu près trois fois par seconde.

    Dans votre code:
    - la fonction echoCheck() elle est appelée à chaque fois qu'une mesure particulière a été réussie (currentSensor vous dit quel capteur était impliqué).
    - la fonction oneSensorCycle() est appelée à chaque fois que tous les capteurs ont été mis à jour

    vous pourriez mettre dans la fonction oneSensorCycle() un petit calcul (les distances sont dans le tableau cm[]) qui détermine la temps entre 2 beeps (par exemple 0 c'est un beep continu, 100 c'est un beep toutes les 100ms, 200 un beep toutes les 200ms, etc et une valeur négative voudrait dire pas de beep) et dans la loop, après le commentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      // Un autre code qui * N'ANALYSE PAS * les résultats de ping peut aller ici.
    vous pouvez faire beeper plus ou moins rapidement votre piezo/buzzer. IL NE FAUT BIEN SUR PAS QUE LE CODE DU BEEP SOIT BLOQUANT (utilisez la technique de l'exemple 'blink without delay')

  8. #8
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2020
    Messages : 21
    Par défaut
    Merci pour la réponse dans laquelle j'ai un peu de mal à comprendre je ne suis pas expert dans la programmation.
    Je suis arrivé à faire fonctionner mon buzzer mais c'est un code très basique avec un If de la distance (cm[currentSensor]). Ce n'est pas parfait, mais je vais étudier votre proposition même si je vais avoir du mal à traduire vos remarques.
    Marc

  9. #9
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 918
    Par défaut
    étudiez le code de "blink without delay" et essayez de bien le comprendre

    ensuite ce que je dis c'est que dans la fonction oneSensorCycle() vous calculez un ∆t entre beeps.

    Pour cela vous passez en revu chacun des capteurs, trouvez celui qui est le plus proche d'un obstacle - appelons cette distance dMin.
    on va dire que si dMin est plus petit que 10cm alors la sonnerie doit être continue, si dMin et plus grand que 1m alors ça sonne pas et entre les deux ça sonne de plus en plus vite si la distance diminue.

    on pourrait écrire

    variable globale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bool buzzerActif;
    unsigned long deltaT;
    ...
    puis vous modifiez la fonction qui est appelée à chaque fois que tous les capteurs ont été mis à jour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void oneSensorCycle() { // Cycle de ping du capteur terminé, faites quelque chose avec les résultats.
      unsigned int dMin=10000;
      // je vous laisse calculer dMin en regardant la plus petite des valeurs stockée dans le tableau cm[]
      for (uint8_t i = 0; i < SONAR_NUM; i++) {
        ... à faire ...
      }
      // on calcule la demi periode
      buzzerActif = true;
      if (dMin > 100) buzzerActif = false; 
      else 
      if (dMin < 10) deltaT = 0;
      else // on est entre 10 et 100 
      deltaT = map(dMin, 10, 100, 50, 500); // on pourrait aussi avoir une formule comme "deltaT = 5 x dMin;" --> 10cm -> 50ms ON, 50ms OFF et à 100cm 500ms ON, 500ms OFF
    }
    enfin dans la loop() vous appliquez le principe de "blink without delay" pour faire "clignoter" le buzzer sur une demi periode de deltaT sauf si buzzerActif est faux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void loop()
    {
      if (buzzerActif) {
        ... à faire sur le le principe de "blink without delay" ... on alterne des ON et OFF pour le buzzer en fonction de deltaT
      } else {
        // éteindre le buzzer
      }
    }
    c'est juste une idée, il y a d'autres façons de le faire

  10. #10
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2020
    Messages : 21
    Par défaut
    Merci j'ai trouvé un autre code pour faire sonner le buzzer en fonction de la distance :

    Nom : exemple arduino1.jpeg
Affichages : 319
Taille : 43,5 Ko

    Et pour faire sonner le buzzer à la mise sous tension (marche arrière) :

    Nom : exemple arduino2.jpeg
Affichages : 305
Taille : 22,0 Ko

  11. #11
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 918
    Par défaut
    Bonjour

    oui - c'est aussi une approche. elle a l'inconvénient de bloquer la mesure des radars pendant la durée du beep mais si cela vous convient et reste acceptable pour éviter un accident, c'est possible.

    (pour poster du code c'est mieux de copier coller le texte quand même et le mettre entre balises de code plutôt que de mettre une image)

  12. #12
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2020
    Messages : 21
    Par défaut
    Effectivement les balises sont mieux désolé.
    Par contre vous dites que pendant le bip je n'ai pas de mesure ? Il faut que je fasse comme vous me l'avez suggéré alors ?
    Quel est l'élément qui vous fait dire que les ping sont bloqués pendant le bip ?
    Pourtant quand le bip sonne j'ai des valeurs qui défilent dans le moniteur série. Comme ça ça fonctionne pas mal je trouve mais il faudra que je vois avec les 4 capteurs en place. Le JSN-SR04T (étanche) ne détecte pas en dessous de 20 cm) y a t-il une astuce pour réduire cette distance ?
    Merci encore de bien vouloir m'aider.
    Marc

  13. #13
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 918
    Par défaut
    Citation Envoyé par Marcus13190 Voir le message
    Quel est l'élément qui vous fait dire que les ping sont bloqués pendant le bip ?
    L’appel à la fonction delay() fait une attente active. Le processeur ne fait rien d’autre (éventuellement une interruption sera traitée) en attendant la fin du delai.

  14. #14
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2020
    Messages : 21
    Par défaut
    OK mais à la place de delay() je pourrai faire quelle action?
    Marc

  15. #15
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 918
    Par défaut
    Citation Envoyé par Marcus13190 Voir le message
    OK mais à la place de delay() je pourrai faire quelle action?
    Marc
    Étudier blink without delay, comme déjà mentionné. Comme son nom l’indique prendre cette approche permet de gérer les attentes sans la fonction delay. Ça nécessite de structurer son code correctement en laissant tourner la loop() et vérifiant à chaque tour de boucle s’il est temps de faire quelque chose.

  16. #16
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 918
    Par défaut
    comme dit précédemment:

    Dans votre code:
    - la fonction echoCheck() elle est appelée à chaque fois qu'une mesure particulière a été réussie (currentSensor vous dit quel capteur était impliqué).
    - la fonction oneSensorCycle() est appelée à chaque fois que tous les capteurs ont été mis à jour

    Si vous mettez la gestion du beep dans echoCheck() vous n'avez effectivement qu'à vérifier currentSensor mais si vous faites la gestion dans oneSensorCycle() alors il faut tester tous les entrées du capteurs du tableau cm[] et le beep doit être lié à la plus petite distance

  17. #17
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2020
    Messages : 21
    Par défaut
    Dans le programme le premier sensor qui voit sa distance la plus courte est celui qui fait bipper le buzzer non ? Si je met un obstacle à dmoy d'un des deux capteurs le bip est cadencé rapide mais pendant ce temps si un autre obstacle s'approche du deuxième capteur et qu'il s'approche en dessous de la distance dmin le bip passe continu donc le fonctionnement est correct il me semble.

  18. #18
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2020
    Messages : 21
    Par défaut
    Autre remarque dans mon cas j'ai besoin de 3 façons de faire sonner le buzzer (fréquence) je dois définir 3 "const unsigned long interval' ?

  19. #19
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 918
    Par défaut
    Citation Envoyé par Marcus13190 Voir le message
    Dans le programme le premier sensor qui voit sa distance la plus courte est celui qui fait bipper le buzzer non ? Si je met un obstacle à dmoy d'un des deux capteurs le bip est cadencé rapide mais pendant ce temps si un autre obstacle s'approche du deuxième capteur et qu'il s'approche en dessous de la distance dmin le bip passe continu donc le fonctionnement est correct il me semble.
    ça dépend dans quelle fonction vous faites le test.

    Dans oneSensorCycle() currentSensor aura toujours la même valeur, c'est quand tous les capteurs sont mis à jour donc si c'est un autre capteur qui avait la distance min, vous le ratez.

    pour en avoir le coeur net, affichez l'indice dans le tableau des capteurs de celui qui est retenu pour choisir le beep.

    Citation Envoyé par Marcus13190 Voir le message
    Autre remarque dans mon cas j'ai besoin de 3 façons de faire sonner le buzzer (fréquence) je dois définir 3 "const unsigned long interval' ?
    oui, ou alors calculer la valeur à partir d'une fréquence de base. par exemple vous avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const unsigned long interval = 3000;
    et les 2 autres sont 2/3 et 1/3 de la valeur

  20. #20
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2020
    Messages : 21
    Par défaut
    Bien vu pour les 3 cadences. Merci. J'ai bien fait fonctionner mon système avec blink without delay j'ai compris la subtilité.
    Je vais essayer les 3 cadences et mettrai le code final.
    Comment changer la fréquence des bips en fonction de la distance ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Fabriquer un radar de recul pour un Camping Car
    Par megamario dans le forum Arduino
    Réponses: 4
    Dernier message: 02/12/2019, 08h58
  2. Radar de recul Vert orange et rouge
    Par Boby71C dans le forum Arduino
    Réponses: 1
    Dernier message: 15/03/2018, 17h38
  3. Radar de recul de garage : problème de code ou de logique
    Par bertrand0611001 dans le forum Arduino
    Réponses: 18
    Dernier message: 15/03/2018, 16h25
  4. Cherche contenu pour BDD (ville, automobile..)
    Par Invité dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 29/03/2005, 20h17
  5. Réponses: 2
    Dernier message: 15/03/2005, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo