Bonjour, merci pour vos réponses !
j’ai pu avancer sur le code de mon projet. Pour vous expliquer un peu plus en détail ma façon de procéder pour ce projet:
J’ai pour l’instant 3 capteurs à ultrasons qui vont me permettre de mesurer la largeur et la longueur d’un carton. On imagine que le carton est placé au centre de ces 3 capteurs.
Dans mon code, Capteur1 me permet de mesurer la longueur du carton. j’ai pensé par exemple à ce que le carton arrive en butée contre un bord de l’appareil de mesure, ce qui actionne un bouton poussoir (Bouton). en connaissant la longueur entre le Capteur1 et la butée de l’appareil de mesure (dans mon code 100cm), j’en déduit la longueur du carton ( fonction mesureLongueur);
Pour la largeur du carton c’est un peu plus complexe puisque cette largeur est calculée en fonction des mesures des Capteur2 et Capteur3, disposés l’un face à l’autre. Toujours en connaissant la distance qui les séparent (100cm) j’en déduit la largeur= 100 -mesure2-mesure3.
Ces mesures sont comme je l’ai dis déclenchées lorsque le carton vient appuyer le bouton poussoir. Dans ce cas on lance les fonctions mesureLongueur et mesureLargeur, pendant un cours délai, car il faut imaginer que cet appareil soit à l’extremité d’un convoyeur de carton, et donc qu’il peut rester quelques temps le temps qu’un opérateur vienne le ranger.
Voilà pour le résumé. J’ai réussi à faire fonctionner ce code pour obtenir des mesures avec deux capteurs.
Lorsque j’ai voulu ajouter le Capteur3 et effectuer les calculs dans la fonction mesureLargeur, sur ma console n’apparait seulement la mesure pour la longueur du carton mais pas celle pour la largeur.
Ma question: est-ce qu’il est possible dans ma fonction mesureLargeur de pouvoir récupérer les données de 2 capteurs pour effectuer des calculs, et de répéter les commandes pour les 2 capteurs comme je l’ai fait ?
Je vous remercie pour votre aide,
Raphaël
const int Bouton = 2;
int pinCapteur1 = 7;
int pinCapteur2 = 4;
int pinCapteur3 = 8;
int vSon=59; //valeur de temps en µs d'un aller retour du son sur 1cm
void setup()
{
pinMode(2, INPUT);
pinMode(7, OUTPUT);
pinMode(4, OUTPUT);
pinMode(8, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int b = 1;
int a = digitalRead(2);
if (a == b)
{
int longueur=mesureLongueur(); //on récupère la valeur de la longueur du carton
Serial.println(longueur);// on affiche la longueur du carton en cm
int largeur=mesureLargeur(); //on récupère la valeur de la largeur du carton
Serial.println(largeur);// on affiche la largeur du carton en cm
delay(100);
while (digitalRead(Bouton)==HIGH);
delay(500);
}
else
{
}
//Delay a little bit to improve simulation performance
}
//fonction de mesure de la longueur avec capteur 1
int mesureLongueur() {
unsigned long mesure = 0; // variable de mesure
unsigned long cumul = 0; //variable pour la moyenne
for (int t = 0; t < 10; t++) { // boucle pour effectuer 10 mesures
pinMode (pinCapteur1, OUTPUT); //on prépare le pin pour envoyer le signal
digitalWrite(pinCapteur1, LOW); //on commence à l'état bas
delayMicroseconds(2); //on attend que le signal soit clair
digitalWrite(pinCapteur1, HIGH);//mise à l'état haut
delayMicroseconds(10); //pendant 10 µs
digitalWrite(pinCapteur1, LOW); //mise à l'état bas
pinMode(pinCapteur1, INPUT); //on prépare le pin pour recevoir un état
mesure = pulseIn(pinCapteur1, HIGH); // fonction pulseIn qui attend un état haut et renvoie le temps d'attente
cumul+=mesure; //on cumule les mesures
delay(50); //attente obligatoire entre deux mesures
}
mesure=cumul/10; //on calcule la moyenne des mesures
mesure=100 - mesure/vSon;//on transforme en cm
return mesure; //on renvoie la mesure au programme principal
}
//fonction de mesure de distance pour la largeur
int mesureLargeur() {
unsigned long mesure2 = 0; // variable de mesure capteur 2
unsigned long mesure3 = 0; // variable mesure capteur 3
unsigned long largeur = 0; // variable de la largeur
unsigned long somme2 = 0; //variable pour la moyenne
unsigned long somme3 = 0; // variable calculer la moyenne
for (int t = 0; t < 10; t++) { // boucle pour effectuer 10 mesures
pinMode (pinCapteur2, OUTPUT);
pinMode (pinCapteur3, OUTPUT);
digitalWrite(pinCapteur2, LOW); //on prépare le pin pour envoyer le signal
digitalWrite(pinCapteur3, LOW); //on commence à l'état bas
delayMicroseconds(2); //on attend que le signal soit clair
digitalWrite(pinCapteur2, HIGH);//mise à l'état haut
delayMicroseconds(10);
digitalWrite(pinCapteur3, HIGH);
delayMicroseconds(10); //pendant 10 µs
digitalWrite(pinCapteur2, LOW); //mise à l'état bas
digitalWrite(pinCapteur3, LOW);
pinMode(pinCapteur2, INPUT); //on prépare le pin pour recevoir un état
pinMode(pinCapteur3, INPUT);
mesure2 = pulseIn(pinCapteur2, HIGH); // fonction pulseIn qui attend un état haut et renvoie le temps d'attente
mesure3 = pulseIn(pinCapteur3, HIGH);
somme2 += mesure2; //on somme les mesures du capteur 2
delay(20);
somme3 += mesure3; //on somme les mesures du capteur 3
delay(20); //attente obligatoire entre deux mesures
}
mesure2=somme2/10; //on calcule la moyenne des mesures du capteur2
mesure3=somme3/10; //on calcule la moyenne des mesures du capteur3
largeur=100 - mesure2/vSon - mesure3/vSon;//on transforme en cm
return largeur; //on renvoie la largeur au programme principal
}