Que pensez vous de mon programme. et auriez vous des idées

Bonjour a tous

voici une partie de mon programme que j’ai écris avec votre aide a tous et je vous en remercie…

c’est une des partie ou j’effectue des tests de présence d’une pièce sur un montage et deux flacons sur

leurs bases pour via des lasers et photo diodes puis en fonction des signaux reçu il y as une indication

visuel via des led RGB et un errant TFT LCD et auditive via un DFPlayer MP3

dans cette partie j’utilise deux fois de suite un while et je me demande si ce ne serait pas mieux soit avec

un switch case et des else if ?

De plus j’aimerais que la diode clignote tout le temps, mais comme dans ma boucle il y as une

temporisation pour permettre au lecteur mp3 de finir a chaque fois son travail " plusieurs secondes " la

diode ne clignote qu’une fois par cycle !

//------------ application du primer A ----------------------------//
      

PhotoResAVal = analogRead(PhotoResA);             // valeur de la Photorésistance  du flacon A
delay(15);                                                         // Temps de réponse de la photo diode
PhotoResBVal = analogRead(PhotoResB);             // valeur de la Photorésistance  du flacon B
delay(15);                                                         // Temps de réponse de la photo diode
PhotoResMVal = analogRead(PhotoResM);            //  valeur de la Photorésistance du flacon M
delay(15);                                                         // Temps de réponse de la photo diode
                

myGLCD.setBackColor(WHITE);
myGLCD.fillScr(WHITE);                             // Remplissage de l'ecran TFT en BLANC.
myGLCD.setFont(GroteskBold16x32);          // Déclaration de la police d'écriture à utiliser.
myGLCD.setColor(BLACK);                          // Déclaration de la couleur de la police d'écriture en BLANC.
myGLCD.print("UTILISEZ LE", CENTER, 80); // Ecrire "..." le centrer horizontalement sur la ligne No 80.
myGLCD.print("FLACON A", CENTER, 130);   // Ecrire "..." le centrer horizontalement sur la ligne No 130.



while (analogRead(PhotoResM) <500 && analogRead(PhotoResA) <500 && analogRead(PhotoResB) <500 ) 
           
           
//  Si et seulement si et tant que la lecture de la presence des flacons 1, 2, et du montage est basse alors fais ceci 


                  
 
 {
digitalWrite(rgbAvert, LOW);                          // Allume la led RGB A vert.
digitalWrite(rgbBvert, HIGH);                         // Etein la led RGB B vert.
digitalWrite(rgbMvert, HIGH);                        // Etein la led RGB M vert.
               

digitalWrite(rgbArouge, HIGH);                       // ETein la led RGB A rouge.
digitalWrite(rgbBrouge, LOW);                        // Allume la led RGB B rouge.
digitalWrite(rgbMrouge, LOW);                        // Allume la led RGB M rouge.

               
digitalWrite(rgbAvert, LOW);                           // Etein la led RGB A vert.
delay(200);                                                   // Attends 200 ms.
digitalWrite(rgbAvert, LOW);                           // Allume la led RGB B vert.
delay(200);                                                   // Attends 200 ms.
  
myDFPlayer.play (15);                                    // Lire la piste MP3 No 15  " Utilisez le flacon A "
delay(5000);                                                 // Attendre 5000 ms.
                          

                

 
 }

PhotoResAVal = analogRead(PhotoResA);               // valeur de la Photorésistance de la base du flacon A
delay(15);                                                           // Temps de réponse de la photo diode
PhotoResBVal = analogRead(PhotoResB);               // valeur de la Photorésistance de la base du flacon B
delay(15);                                                           // Temps de réponse de la photo diode
PhotoResMVal = analogRead(PhotoResM);              // valeur de la Photorésistance de la base du flacon M
delay(15);                                                           // Temps de réponse de la photo diode


myGLCD.clrScr();                                       // on efface l'écran au début
myGLCD.setBackColor(WHITE);
myGLCD.fillScr(WHITE);                                       // Remplissage de l'ecran TFT en BLANC.
myGLCD.setFont(GroteskBold16x32);                    // Déclaration de la police d'écriture à utiliser.
myGLCD.print("FLACON 1", CENTER, 80);              // Ecrire "..." le centrer  et sur la ligne No 80.
myGLCD.print("EN UTILISATION", CENTER, 130);   // Ecrire "..." le centrer  et sur la ligne No 100.

 
                        
while ( analogRead(PhotoResA) >500 && analogRead(PhotoResM) <500 && analogRead(PhotoResB) <500 )

                
               // tant que la lecture de la phote-diode de presence flacon 2 et 3 sont basse et seulement si la lecture photo-diode de presence piece M est basse et si et seulement si la lecture de presence du flacon 1 est haute alors fais ceci  

 
{

  
digitalWrite(rgbAvert, HIGH);                        // Etein la led RGB A vert.
digitalWrite(rgbAbleu, LOW);                         // Etein la led RGB A bleu.

myDFPlayer.play (17);                        // Lire la piste MP3 No 17  " Flacon A en utilisation "
delay(5000);                                // Attendre 5000 ms.

 }

Le programme est fini et fonction très bien tant que l’on suit les instruction a la règle , mais si par erreur on enlève un flacon a la place d’un autre la c’est le bordel !!! et il faut tout reprendre la séquence a zéro auriez vous une idée pour que cela ne se produise pas.

merci a vous tous.

Salut

Quelle bibliothèque DFPlayer utilises-tu ?

Perso je reverrais l'architecture du programme - ce que vous décrivez c'est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)

sinon avec juste un bout de code (appuyez sur ctrl-T vous verrez c'est tout de suite plus lisible quand c'est indenté proprement) difficile de voir la structure globale

merci pour votre intérêt,

j'utilise la librairie. DFRobotDFPlayerMini myDFPlayer. pour le lecteur MP3. qui m 'as donné pas mal de souci du fait que j'ai du numéroté les piste en chiffre impaire. car elle ne prenait pas les chiffre pair. et ce n'est pas dis dans la doc ca ma rendu fou avant de comprendre.

concernant la première repense je vais consulter votre tuto pour machine a état .

avez vous une idée pour que les led clignote meme lorsque le lecteur MP3 travaille.

merci

Sébastien

j’utilise la librairie. DFRobotDFPlayerMini

OK, c’est la librairie que j’utilise aussi.

dans cette partie j’utilise deux fois de suite un while

Effectivement un while bloque la loop(). Pas top.

De plus j’aimerais que la diode clignote tout le temps, mais comme dans ma boucle il y as une temporisation pour permettre au lecteur mp3 de finir a chaque fois son travail " plusieurs secondes " la diode ne clignote qu’une fois par cycle !

Pas besoin d’attendre un délai pour laisser le player terminer le morceau.

Dans les exemples de la bibliothèque l’auteur affiche le statut du lecteur.

Il utilise la méthode myDFPlayer.readType() qui retourne l’état du lecteur.
Il est facile de comparer cette valeur à DFPlayerPlayFinished pour savoir si le morceau est fini.
Il faut appeler myDFPlayer.available() avant d’appeler myDFPlayer.readType()

Ton code pourrait ressembler à ceci :

  static int playing;

  if (analogRead(PhotoResM) < 500 && analogRead(PhotoResA) < 500 && analogRead(PhotoResB) < 500 ) {
    digitalWrite(rgbAvert, LOW);                          // Allume la led RGB A vert.
    digitalWrite(rgbBvert, HIGH);                         // Etein la led RGB B vert.
    digitalWrite(rgbMvert, HIGH);                        // Etein la led RGB M vert.
    digitalWrite(rgbArouge, HIGH);                       // ETein la led RGB A rouge.
    digitalWrite(rgbBrouge, LOW);                        // Allume la led RGB B rouge.
    digitalWrite(rgbMrouge, LOW);                        // Allume la led RGB M rouge.
    digitalWrite(rgbAvert, LOW);                           // Etein la led RGB A vert.
    delay(200);                                                   // Attends 200 ms.
    digitalWrite(rgbAvert, LOW);                           // Allume la led RGB B vert.
    delay(200);                                                   // Attends 200 ms.

    if (!playing) {
      myDFPlayer.play (15);                                    // Lire la piste MP3 No 15  " Utilisez le flacon A "
      playing = true;
    }
  }

  // ....

  if ( analogRead(PhotoResA) > 500 && analogRead(PhotoResM) < 500 && analogRead(PhotoResB) < 500 ) {
    digitalWrite(rgbAvert, HIGH);                        // Etein la led RGB A vert.
    digitalWrite(rgbAbleu, LOW);                         // Etein la led RGB A bleu.
    if (!playing) {
      myDFPlayer.play (17);                        // Lire la piste MP3 No 17  " Flacon A en utilisation "
      playing = true;
    }
  }
  if (myDFPlayer.available()) {
    if (myDFPlayer.readType() == DFPlayerPlayFinished) {
      playing = false;
      Serial.println("Play Finished!");
    }
  }

Je n’ai pas compilé. A toi de jouer.

j’utilise la librairie. DFRobotDFPlayerMini myDFPlayer. pour le lecteur MP3. qui m 'as donné pas mal de souci du fait que j’ai du numéroté les piste en chiffre impaire. car elle ne prenait pas les chiffre pair. et ce n’est pas dis dans la doc ca ma rendu fou avant de comprendre.

Personnellement j’utilise la méthode myDFPlayer.playFolder(), bien plus pratique.
Tu dois placer tes fichiers dans un répertoire nommé “01” par exemple (2 digits).
Les fichiers doivent avoir un nom composé de 3 digits.

  myDFPlayer.playFolder(1, 1);             // joue le morceau nommé 01/001.mp3

J’ai découvert que l’on pouvait les nommer de manière plus lisible : 001-dong.mp3 par exemple.

  myDFPlayer.playFolder(1, 1);             // joue le morceau nommé 01/001-dong.mp3

@+

Merci mr Hbachetti,

toujours au rdv pour donner un coup de main.

je vais essayer tout cela et je reviendrais dans le post une fois compilé et fonctionnel j'espère.

mes fichier MP3 sont tout comme les tiens du genre 001-XXXXX.MP3 mais ils directement sur la carte mémoire et non pas dans un fichier as rencontré le même souci concernant la lecture de fichier impaire?

j'ai comme l'impression que le no importe peu et que le lecteur prends les fichier dans l'ordre ou ils ont été importé sur la carte mémoire c'est vraiment bizarre cela ne correspond pas du tout a la data sheet du produit!!!

cordialement.

@+ Séb

as rencontré le même souci concernant la lecture de fichier impaire?

Non, je suis passé directement à la lecture de fichier dans un répertoire car j’ai deux répertoires, un pour les bruitages, et un pour des sonneries.

le lecteur prends les fichier dans l’ordre ou ils ont été importé sur la carte mémoire

Je crois que oui.
Vu ICI.

@+