comment additionner les deux mesures de distance de deux capteurs

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

bonjour,

j’ai édité le programme afin de prendre en compte les mesures de distance avec deux télémètres . Sur un point 0 virtuel , un télémètre mesure la distance haute et l’autre la distance basse. Je voudrais par conséquent additionner la mesure haute et la mesure basse afin de me donner sur l’écran lcd la mesure total additionnée des deux ….et j’y arrive pas. Pour l’instant les distances de chaque télémètre se lis sur l’ecran ligne 1(capteur haut) et ligne 2(capteur bas). merci de m’aiguiller de formule afin de pouvoir finir mon projet et de n’afficher que la distance total des deux mesures

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int USTrigHaut(6);
const int USEchoHaut(7);
const int USTrigBas(9);
const int USEchoBas(8);
float VITESSE =340;
  
void setup() {
  // LCD
  lcd.begin(2,16); 
  // Message de demarage
  lcd.setCursor(2,0);
  lcd.print("LASER V2");
  lcd.setCursor(4,1);
  lcd.print("by  LMg");
  delay(9000);
  lcd.clear();
  // telemetre SR04 1
 pinMode(USTrigHaut, OUTPUT);
 pinMode(USEchoHaut, INPUT); 
 // telemetre SR04 2
 pinMode(USTrigBas, OUTPUT);
 pinMode(USEchoBas, INPUT);
 
lcd.setCursor(0,0);            // Curseur positionné ligne "0" 1er caractère
 
  
}

void loop() {
  
     { // capteur haut
      
  // 1. Un état haut de 10 microsecondes est mis sur la broche "Trig"
   digitalWrite(USTrigHaut, HIGH);
   delayMicroseconds(10); //on attend 10 µs
   // 2. On remet à l’état bas la broche Trig
   digitalWrite(USTrigHaut, LOW);
 
   // 3. On lit la durée d’état haut sur la broche "Echo"
   unsigned long duree = pulseIn(USEchoHaut, HIGH);
 
   if(duree > 30000)
   {
      // si la durée est supérieure à 30ms, l'onde est perdue
      lcd.setCursor(0,0);   
      lcd.print ("Err.: Dist > 4m");
      delay(500);
      lcd.clear();
   }
   else
   {
      // 4. On divise cette durée par deux pour n'avoir qu'un trajet
      duree = duree/2;
 
      // 5. On calcule la distance avec la formule d=v*t
      float temps = duree/10000.0; //on met en secondes
      float dist = temps*VITESSE ; //on multiplie par la vitesse, d=t*v et on ajoute la largeur du boitier (qui compte pour la mesure)
 
      // 6. On affiche la distance
      lcd.setCursor(0,0);   
      lcd.print ("Dist: ");  
      lcd.setCursor(8,0);  
      lcd.print (dist);
   }
 
   // petite pause
   delay(250);   
     }
    {
     // capteur bas
     
  // 1. Un état haut de 10 microsecondes est mis sur la broche "Trig"
   digitalWrite(USTrigBas, HIGH);
   delayMicroseconds(10); //on attend 10 µs
   // 2. On remet à l’état bas la broche Trig
   digitalWrite(USTrigBas, LOW);
 
 
 
   if(duree > 30000)
   {
      // si la durée est supérieure à 30ms, l'onde est perdue
      lcd.setCursor(0,0);   
      lcd.print ("Err.: Dist > 4m");
      delay(500);
      lcd.clear();
   }
   else
   {
      // 4. On divise cette durée par deux pour n'avoir qu'un trajet
      duree = duree/2;
 
      // 5. On calcule la distance avec la formule d=v*t
      float temps = duree/10000.0; //on met en secondes
      float dist = temps*VITESSE ; //on multiplie par la vitesse, d=t*v et on ajoute la largeur du boitier (qui compte pour la mesure)
 
      // 6. On affiche la distance
      lcd.setCursor(0,1);   
      lcd.print ("Dist: ");  
      lcd.setCursor(8,1);  
      lcd.print (dist);
   }
 
   // petite pause
   delay(250);          
    }
}

Édité par laser.lmb.v2

+0 -0

Cette réponse a aidé l’auteur du sujet

Bonjour,

Dans le code, il manque l’appel à pulseIn pour ton second capteur. Mis-à part ça, crée une variable distanceTotale dans le bloc de loop (voire globale, comme tu préfères). Au début de chaque appel à loop tu mets cette variable à 0, tu lui ajoutes la distance du premier capteur aux alentours de la ligne 66, puis celle du second capteur au niveau de la ligne 104.

Ça donnerait un code comme ça :

void loop(void) {
  unsigned long D = 0; // Distance totale
  
  { //capteur haut
    ...
      lcd.setCursor(0,0);   
      lcd.print ("Dist: ");
      lcd.setCursor(8,0);  
      lcd.print (dist);
      
      D += dist; // Ajout à la distance totale
  }
  
  // et idem pour le capteur bas
}

La variable D doit avoir une portée dans chacun des deux blocs capteur haut et capteur bas. L’affichage se fait alors à la fin de la loop.

+1 -0
Auteur du sujet

@tholo18

bonjour , super merci beaucoup , oui en effet le pulseIn manquait , à force d’effacer de recommencer , j’ai du supprimer une ligne, je m’en suis rendus compte quand j’ai voulu faire un teste sur simulateur…planté donc verifier et remis aller je mis met et je croise les doigts

+0 -0
Auteur du sujet

@ tholos18

happynness !!!!!! yess tout est ok merci beaucoup maintenant je m’attaque à ajouter un bouton pour une impulsion des deux capteurs de 10 secondes high

merci encore gael

Édité par laser.lmb.v2

+0 -0

Staff

Hello,

Pour information, j’ai déplacé ton sujet dans la section Programmation. La section Vos Projets est réservée à la présentation de projets plus touffus plutôt qu’aux demandes d’aide sur un point particulier dans un programme.

Édité par adri1

I don’t mind that you think slowly, but I do mind that you are publishing faster. — W. Pauli

+1 -0

Hello,

Pour information, j’ai déplacé ton sujet dans la section Programmation. La section Vos Projets est réservée à la présentation de projets plus touffus plutôt qu’aux demandes d’aide sur un point particulier dans un programme.

adri1

@adri1 Je le vois toujours dans "Vos Projets" :p

Découvrez mon dernier jeux Android : Calypso 2 - Ma dernière création lors du Ludum Dare 46 -> The Last Flame

+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