Utilisation de 2 télémètres en parallèle

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous, Pour mon projet de Terminale, j'ai besoin d'utiliser 2 télémètres simultanément. J'ai donc suivi ce très bon tutoriel : https://zestedesavoir.com/tutoriels/539/realiser-un-telemetre-a-ultrasons/ Et j'ai modifié le programme comme ceci

 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
const int USTrig = 8; // Déclencheur sur la broche 8
const int USEcho = 9; // Réception sur la broche 9
const int USTrigBIS = 6;
const int USEchoBIS = 7;

void setup() {
    pinMode(USTrig, OUTPUT);
    pinMode(USEcho, INPUT);
    pinMode(USTrigBIS, OUTPUT);
    pinMode(USEchoBIS, INPUT);

    digitalWrite(USTrig, LOW);
    digitalWrite(USTrigBIS, LOW);

    Serial.begin(9600);
}
#define VITESSE 340 //vitesse du son 340 m/s

// setup()

void loop()
{
   // 1. Un état haut de 10 microsecondes est mis sur la broche "Trig"
   digitalWrite(USTrig, HIGH);
   digitalWrite(USTrigBIS, HIGH);
   delayMicroseconds(10); //on attend 10 µs
   // 2. On remet à l’état bas la broche Trig
   digitalWrite(USTrig, LOW);
   digitalWrite(USTrigBIS, LOW);

   // 3. On lit la durée d’état haut sur la broche "Echo"
   unsigned long duree = pulseIn(USEcho, HIGH);
   unsigned long dureebis = pulseIn(USEchoBIS, HIGH);

   if(duree > 30000)
   {
      // si la durée est supérieure à 30ms, l'onde est perdue
      Serial.println("Onde perdue, mesure échouée !");
   }
   else
   {
      // 4. On divise cette durée par deux pour n'avoir qu'un trajet
      duree = duree/2;
      dureebis = dureebis/2;

      // 5. On calcule la distance avec la formule d=v*t
      float temps = duree/1000000.0; //on met en secondes
      float distance = temps*VITESSE; //on multiplie par la vitesse, d=t*v
      float tempsbis = dureebis/1000000.0;
      float distancebis = tempsbis*VITESSE;

      // 6. On affiche la distance
      Serial.print("Duree = ");
      Serial.println(temps); //affiche le temps de vol d'un trajet en secondes
      Serial.print("Distance = ");
      Serial.println(distance); //affiche la distance mesurée (en mètres)
      Serial.print("Duree2 = ");
      Serial.println(tempsbis); //affiche le temps de vol d'un trajet en secondes
      Serial.print("Distance2 = ");
      Serial.println(distancebis); //affiche la distance mesurée (en mètres)
   }

   // petite pause
   delay(250);
}

Mais lorsque je lance le programme, sur le moniteur série je lis : Duree = 0.00 Distance = 0.29 Duree2 = 0.00 Distance2 = 0.00 Pas moyen d'avoir une Distance2, j'ai pourtant vérifié et revérifié tous mes branchements, je voulais donc savoir si quelque chose n'allait pas dans mon programme. Merci d'avance :) Blairuae

+0 -0

pulseIn() étant bloquant, c'est fortement possible que tu perds ta deuxième onde le temps que la première soit lu.

La solution la plus simple est surement de faire deux mesures successives, lire en simultanée va demande des modifications bien plus compliquée (perso je ferais l'utilisation d'un Timer par exemple)

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte