Go Down

Topic: Commande LED WS2801 avec Sensor Mic KY038 (Read 519 times) previous topic - next topic

Vinchiappetto

Bonjour,
je suis un novice dans la programmation de l'Arduino. Je suis en train de travailler sur un projet pour commander des LED WS2801. L'idée de base c'est d'avoir plusieurs mémoires et les rappeler à l'aide d'un joypad. Chaque mémoire fait varier les leds selon des interactions.
J'ai choisi de travailler sur un principe de mémoires afin de pouvoir par la suite nourrir et/ou modifier mon code.
A ce jour j'ai intégré un capteur de volume, le KY038. Dans une des mémoires j'aimerais bien pouvoir arrêter un loop grâce à claquement de mains. Mais je m'aperçois que j'ai du mal pendant mon loop à avoir l'état du microphone toujours en « priorité ». C'est-à-dire que j'ai l'impression que mon loop pendant qu'il gère les leds oublie de vérifier l'état du microphone, et pourtant je rappelle la fonction de la lecture du micro partout (surement ce n'est pas la bonne méthode). Dans cette mémoire je voudrais arrêter l'intensité des leds qui passent de 0% à 100% de façon cyclique avec un battement de mains.
Dans le loop je demande à l'arduino aussi de vérifier l'état du joypad si une nouvelle mémoire est rappelée et pour choisir les couleurs.
J'ai aussi changé la vitesse du baud rate, mais le problème est toujours là.
Bref, je ne sais pas si mon post est clair, mais vu que je tourne en boucle depuis un moment, je confie dans vos précieux conseils pour avancer.
Voici la partie du code (ils manquent les void du joypad, des mémoires et des couleurs. J'espère que ce n'est pas dérangeant, car pour une lecture plus pratique je les déporte sur des "TAB"):

Merci d'avance.
Claudio

Code: [Select]

void Memory_2(){
 
  // déclaration
  int i;
  int j;
  int wait = 1;
  MicLecture(); 
 
 
  for (i = 0; i<= 255; i = i + pausa) { // Leds blancs Fade IN

 
    MicLecture(); 
           
              if (statoMic == false) {
             
                             pausa = 1;                           
                             MicLecture(); 
                           
                          }
                                                       
                 if (statoMic == true)
                 
                          {                             
                             pausa = 0;                                                     
                             MicLecture();         
                          }

                         MicLecture();     
                       
    for (j = 0; j < strip.numPixels(); j++) {
     
      MicLecture(); 
     
       switch (JoyMemory) { // Etat Joypad pour choisir couleurs
      case (1):
      strip.setPixelColor(j, Claudio1 (i) );
       
              MicLecture();                 
      break;
      case (2):
      strip.setPixelColor(j, Claudio2 (i) );
        MicLecture(); 
                           
      break;
      case (3):
      strip.setPixelColor(j, Claudio3 (i) );
       MicLecture(); 
                       
      break;
      case (4):                 
      strip.setPixelColor(j, Claudio4 (i) );
       MicLecture(); 
      break;
      case (5):
     
                             
      strip.setPixelColor(j, Claudio5 (i) );
       MicLecture(); 
      break;
      case (6):
     
                         
      strip.setPixelColor(j, Claudio6 (i) );
       MicLecture(); 
      break;
      case (7):
       if (digitalRead(MicDig)) // S'il le dépasse
        MicLecture(); 
                         
      strip.setPixelColor(j, Claudio7 (i) );
       MicLecture(); 
      break;

      Serial.println (i);
     
    }
    strip.show();   // write all the pixels out
  MicLecture(); 
    delay(wait);
      MicLecture();   


   ChoixMemory(); // vérifie l'état des mémoires
    if (Memory != 2) return;
   
 }
                          }
 for (i = 255; i >= 0; i = i - pausa) { // Leds blancs Fade IN
  MicLecture();
 
           
              if (statoMic == false) {
             
                             pausa = 1;                           
                             
                             MicLecture();     
                          }
                                                       
                 if (statoMic == true)
                 
                          {                             
                             pausa = 0;                                                     
                           
                             MicLecture();                                             
                                             
             }
                             
    for (j = 0; j < strip.numPixels(); j++) {

 MicLecture(); 
         
     
       switch (JoyMemory) {
      case (1):
      strip.setPixelColor(j, Claudio1 (i) );
       
                             
      break;
      case (2):
      strip.setPixelColor(j, Claudio2 (i) );
       
                           
      break;
      case (3):
      strip.setPixelColor(j, Claudio3 (i) );
     
                       
      break;
      case (4):
     
                         
      strip.setPixelColor(j, Claudio4 (i) );
      break;
      case (5):
     
                             
      strip.setPixelColor(j, Claudio5 (i) );
      break;
      case (6):
     
                         
      strip.setPixelColor(j, Claudio6 (i) );
      break;
      case (7):
       if (digitalRead(MicDig)) // S'il le dépasse
                         
      strip.setPixelColor(j, Claudio7 (i) );
      break;
     
     
    }
    strip.show();   // write all the pixels out
      MicLecture();   
    delay(wait);
      MicLecture();   


   ChoixMemory(); // vérifie l'état des mémoires
    if (Memory != 2) return;
   
 }
 }
}
 void MicLecture() {

   if (digitalRead(MicDig)) // S'il le dépasse  // S'il le dépasse
{
  statoMic =!statoMic;
  Serial.print (" Lettura battito ");
  Serial.println (statoMic);
  delay (300);
}                           
 }


infobarquee

bonjour,
si le code n'est pas mis en entier, comment veux tu que l'on aide?
AUCUNE AIDE PAR MP

Vinchiappetto

Bonjour,
oui désolé, mais je ne voulais pas vous faire "décoder" tout mon code, mais le voici en attachement
A savoir que je n'ai pas encore le joypad, donc j'utilise un télémètre pour les essaies.
MERCI !!!!!

Vinchiappetto

Ici c'est avec les "TAB" pour mieux le lire  :o

Vinchiappetto

bonjour,
si le code n'est pas mis en entier, comment veux tu que l'on aide?
... trop compliqué mon code ... ?  :smiley-roll-sweat:

Vinchiappetto

... donc je retourne le sujet pour voir si ma réflexion est juste, et si un bon connaisseur peut m'aider.
Oubliez pour un instant mon code (trop complexe à priori).
Dans mon code je voudrais que les données de mon capteur KY038 soient toujours lues, afin que dès qu'un changement de volume est capté, l'arduino puisse le reconnaître. Mais au même temps l'Arduino est en train de faire d'autre calcules en boucle. Est-ce que il y a une méthode précise qui permet de donner une priorité à la lecture de mon capteur ? Si l'arduino est en train de faire d'autres calcules, est-il possible de lui dire de garder une priorité à mon capteur ? J'ai vu la fonction "while", mais je ne pense pas que c'est la bonne piste. Est-ce que c'est à cause du capteur qui est de mauvaise qualité (j'en ai testé 3) ?
Dans mon code j'utilise une fonction "for" pour varier l'intensité des leds, mais à chaque "step" je vérifie le microphone. Est-ce que c'est la bonne méthode ?


Merci d'avance pour vos réponses
Claudio

Vinchiappetto

et bien on dirait que ce post restera ouvert à vie ...
 :smiley-confuse:
Vive es experts !!!!!

Go Up