comment additionner les deux mesures de distance de deux capteurs

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

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);          
    }
}
+0 -0

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.

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.

+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

+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