Partage
  • Partager sur Facebook
  • Partager sur Twitter

programmer arduino + ez expander

    31 mai 2013 à 17:44:01

    bonjour bonjour,
    j ai trouvé ce code :
    [code]int current;
    int highest = 350;
    int latchPin = 8;
    int clockPin = 12;
    int dataPin = 11;
    int volume[9] = {0b00000000, 0b00000001, 0b00000011, 0b00000111,
                     0b00001111, 0b00011111, 0b00111111, 0b01111111,
                     0b11111111};
                     
    void setup() {
      pinMode(latchPin, OUTPUT);
      pinMode(clockPin, OUTPUT);
      pinMode(dataPin, OUTPUT);
      Serial.begin(9600);
    }
     
    void loop() {
      current = map(analogRead(A0), 0, highest, 0, 9);
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, LSBFIRST, volume[current]);  
      digitalWrite(latchPin, HIGH);
    }
    [/code]
     
    c est un programme qui permet de faire ça http://www.youtube.com/watch?v=chjxg2eqfPg
    mtn j'aimerai pouvoir faire le meme mais avec 2 74HC595
    mais là, je ne sait pas vraiment comment le programmer.
    si vous avez des idées, votre aide est la bienvenue ;)
    bonne journée 

    -
    Edité par costiflex 31 mai 2013 à 21:58:00

    • Partager sur Facebook
    • Partager sur Twitter
      31 mai 2013 à 18:00:17

      Je t'invite à lire la partie 2 et 3 du tuto Arduino où tu apprendras justement à utiliser le 74h595 et les entrées analogiques (pour justement faire un vu-mètre...)
      • Partager sur Facebook
      • Partager sur Twitter

      Retrouvez moi sur mon blog et ma chaine Youtube !

        31 mai 2013 à 18:38:01

        slt Eskimon,

        merci pour ta reponse.

        j ai deja lu ces parties mais là je bloque vraiment sur le programme.

        (je ne crois pas avoir vu un vu-metre avec 2 74HC595)

        • Partager sur Facebook
        • Partager sur Twitter
          31 mai 2013 à 18:57:33

          Alors on va décomposer :)

          Dans le tuto il est expliqué comment utiliser un puis deux 74HC595. Y arrives-tu ? oui ? non ? pourquoi ?

          Ensuite vient la lecture analogique. Y arrives-tu ? oui ? non ? pourquoi ?

          Enfin, on peut passer au composé des deux :)

          • Partager sur Facebook
          • Partager sur Twitter

          Retrouvez moi sur mon blog et ma chaine Youtube !

            31 mai 2013 à 19:02:43

            j ai tenté ça, 

            int highest = 350;
            
            int current;
            
            const int verrou = 8;
            
            const int donnee = 13;
            
            const int horloge = 12;
            
            int volume[9] = {0b00000000, 0b00000001, 0b00000011, 0b00000111,
            
                             0b00001111, 0b00011111, 0b00111111, 0b01111111,
            
                             0b11111111};
            
             
            
            char premier = 8; //en binaire : 00001000
            
            char second = 35; //en binaire : 00100011
            
             
            
            void setup()
            
            {
            
               //on déclare les broches en sortie
            
               pinMode(verrou, OUTPUT);
            
               pinMode(donnee, OUTPUT);
            
               pinMode(horloge, OUTPUT);
            
             
            
               //puis on envoie les données juste une fois
            
                
            
               //on commence par mettre le verrou
            
               digitalWrite(verrou, LOW);
            
             
            
               //on envoie la seconde donnée d'abord
            
               shiftOut(donnee, horloge, LSBFIRST, ~second); //les LEDs vertes du montage
            
               //on envoie la première donnée
            
               shiftOut(donnee, horloge, LSBFIRST, ~premier); //Les LEDs rouges du montage
            
             
            
               //et on relache le verrou pour mettre à jour les données
            
               digitalWrite(verrou, HIGH);
            
            }
            
             
            
            void loop()
            
            {
            
                current = map(analogRead(A0), 0, highest, 0, 9);
            
              digitalWrite(verrou, LOW);
            
              shiftOut(donnee, horloge, LSBFIRST, volume[current]);  
            
              digitalWrite(verrou, HIGH);
            
            }
            
             



            mais je pense que mon void loop n est pas bon

            -
            Edité par costiflex 31 mai 2013 à 21:57:29

            • Partager sur Facebook
            • Partager sur Twitter
              31 mai 2013 à 19:22:48

              mon montage est ci dessus (c'est un vu metre dc les diodes s allument en fonction de la musique) :

              je me suis inspiré de ça pour réaliser la partie droite du schema :

              https://www.youtube.com/watch?v=GBX_6ucEZ1E

              mtn, j aimerai ajouter des sorties grace à 2 74HC595. (partie gauche du schema). 

              Et là ça fait plusieur semaine que je cherche mais malheureusement je ne maitrise pas assez  arduino.

              je pense avoir compris ça : http://www.arduino.cc/en/Tutorial/ShiftOut

              mais je n arrive pas à "traduire" ttes ces infos en code.

              Merci d'avance pour votre aide

              bonne soirée et à bientot

              -
              Edité par costiflex 31 mai 2013 à 21:56:10

              • Partager sur Facebook
              • Partager sur Twitter
                31 mai 2013 à 21:49:37

                je résume, j essai de faire un vu metre avec 2 74HC595 et un arduino uno


                si vous avez des idées pour le programme, je suis tout ouie ^^

                • Partager sur Facebook
                • Partager sur Twitter
                  31 mai 2013 à 21:59:28

                  Bon petite mise au point...

                  Primo : Comme écrit dans ma signature, "mon MP n'est pas une hotline"

                  Secundo : mettre le code dans une balise de code ca prend 2 clics et ca nous simplifie la vie

                  Tertio : C'est un forum, pas un chat, on a aussi une vie sociale donc laisse nous le temps de répondre (ca sert à rien de mettre des messages à moins d'une heure d'intervalle si ce dernier n'apporte rien comme le message juste au dessus)

                  Cela étant dit, As tu relu le cours Arduino sur ce site a propos du 74HC595 et es tu sur d'avoir compris comment il marche ? As tu essayé de décomposer comme je te l'ai conseillé plus tôt ?

                  -
                  Edité par Eskimon 31 mai 2013 à 22:03:04

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Retrouvez moi sur mon blog et ma chaine Youtube !

                    1 juin 2013 à 14:12:49

                    slt

                    dsl pour le mp, je n avais pas vu

                    oui j'ai bien lu le tuto.

                    là où je bloque ds mon programme c'est inserer un 2° 74HC595 à ce code :

                    int current;
                    int highest = 350;
                    int latchPin = 8;
                    int clockPin = 12;
                    int dataPin = 11;
                    int volume[9] = {0b00000000, 0b00000001, 0b00000011, 0b00000111,
                                     0b00001111, 0b00011111, 0b00111111, 0b01111111,
                                     0b11111111};
                                      
                    void setup() {
                      pinMode(latchPin, OUTPUT);
                      pinMode(clockPin, OUTPUT);
                      pinMode(dataPin, OUTPUT);
                      Serial.begin(9600);
                    }
                      
                    void loop() {
                      current = map(analogRead(A0), 0, highest, 0, 9);
                      digitalWrite(latchPin, LOW);
                      shiftOut(dataPin, clockPin, LSBFIRST, volume[current]); 
                      digitalWrite(latchPin, HIGH);
                    }

                    il me semble que le 2° 595 doit utiliser comme entrée, les sorties du 1°

                    dans ce programme, j'ai simplement ajouté un shiftout, mais en demande au arduino de lire du bit de poids fort à celui de poids faible (MSL)

                    int current;
                    int highest = 350;
                    int latchPin = 8;
                    int clockPin = 12;
                    int dataPin = 11;
                    int volume[9] = {0b00000000, 0b00000001, 0b00000011, 0b00000111,
                                     0b00001111, 0b00011111, 0b00111111, 0b01111111,
                                     0b11111111};
                             
                    
                    void setup() {
                      pinMode(latchPin, OUTPUT);
                      pinMode(clockPin, OUTPUT);
                      pinMode(dataPin, OUTPUT);
                      Serial.begin(9600);
                    }
                       
                    void loop() {
                      current = map(analogRead(A0), 0, highest, 0, 9);
                      digitalWrite(latchPin, LOW);
                      shiftOut(dataPin, clockPin, LSBFIRST, volume[current]);
                      shiftOut(dataPin, clockPin, MSBFIRST, volume[current]);
                      digitalWrite(latchPin, HIGH);
                    }
                    

                    je ne comprends pas trop pourquoi ça ne fonctionne pas

                    -
                    Edité par costiflex 1 juin 2013 à 18:12:28

                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 juin 2013 à 12:17:54

                      ça y est, j ai trouvé !! 
                      merci pour ton aide ; )
                      mtn j ai une derniere question et apres je te laisse tranquille  ^^
                      comment fusionner deux programmes ensemble :
                      je m'explique : 
                      je voudrais mettre ce programme
                      int current;
                      int highest = 50;
                      int latchPin = 8;
                      int clockPin = 12;
                      int dataPin = 13;
                      int volume[9] = {
                        0b00000000, 0b00000001, 0b00000011, 0b00000111,
                        0b00001111, 0b00011111, 0b00111111, 0b01111111,
                        0b11111111};
                      
                      void setup() {
                        pinMode(latchPin, OUTPUT);
                        pinMode(clockPin, OUTPUT);
                        pinMode(dataPin, OUTPUT);
                        Serial.begin(9600);
                      }
                      
                      void loop() {
                        current = map(analogRead(A0), 0, highest, 0, 9);
                        digitalWrite(latchPin, LOW);
                        shiftOut(dataPin, clockPin, LSBFIRST, volume[current]);  
                        digitalWrite(latchPin, HIGH);
                      }
                      (pour les sorties du ez-expender)
                      et celui ci :
                      int led[11] = { 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11}; // Assign the pins for the leds
                      int leftChannel = 0;  // left channel input
                      int left, i;
                      
                      void setup()
                      {
                      for (i = 0; i < 11; i++)  // Tell the arduino that the leds are digital outputs
                        pinMode(led[i], OUTPUT);
                      //  Serial.begin(9600); // Uncomment to enable troubleshooting over serial.
                      }
                      
                      void loop()
                      {
                      left = analogRead(leftChannel);  // read the left channel
                      // Serial.println(left);  // uncomment to check the raw input.
                      left = left / 50;    // adjusts the sensitivity  
                      //  Serial.println(left);  // uncomment to check the modified input.
                      // left = 1500;  // uncomment to test all leds light.
                      // left = 0;    // uncomment to check the leds are not lit when the input is 0.
                      
                        if (left == 0)  // if the volume is 0 then turn off all leds
                         {
                         for(i = 0; i < 11; i++)
                           {
                           digitalWrite(led[i], LOW);
                           }
                        }
                        
                        else
                        {
                         for (i = 0; i < left; i++) // turn on the leds up to the volume level
                          {
                           digitalWrite(led[i], HIGH);
                          }
                          
                          for(i = i; i < 11; i++)  // turn off the leds above the voltage level
                           {
                            digitalWrite(led[i], LOW);
                           }
                        }
                      }
                      (pour les sorties du arduino)
                      dans un meme et unique programme
                      suffit il de mettre les 2 voidloop ensemble et les 2 voidsetup ensemble ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 juin 2013 à 14:01:50

                        Les deux setup tu les fusionnent et le code du premier loop tu le met à la place du "if else"
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Retrouvez moi sur mon blog et ma chaine Youtube !

                          2 juin 2013 à 14:50:57

                          donc ça donnerai ça pour le void loop :

                          void loop()
                          {
                          left = analogRead(leftChannel);  // read the left channel
                          // Serial.println(left);  // uncomment to check the raw input.
                          left = left / 50;    // adjusts the sensitivity  
                          //  Serial.println(left);  // uncomment to check the modified input.
                          // left = 1500;  // uncomment to test all leds light.
                          // left = 0;    // uncomment to check the leds are not lit when the input is 0.
                            current = map(analogRead(A0), 0, highest, 0, 9);
                            digitalWrite(latchPin, LOW);
                            shiftOut(dataPin, clockPin, LSBFIRST, volume[current]);  
                            digitalWrite(latchPin, HIGH);


                           ?

                          -
                          Edité par costiflex 2 juin 2013 à 14:52:37

                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 juin 2013 à 15:26:53

                            oui probablement ... Tu comprends ce que tu fais ou pas ? car donner les solutions toute faite je veux bien mais si tu copies/colles sans te poser trop de question ca sert pas à grand chose
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Retrouvez moi sur mon blog et ma chaine Youtube !

                              2 juin 2013 à 18:00:18

                              oui, je comprends mais je l'ai essayé et il n y avait que les sorties du ez-expander qui fonctionnaient

                              alors je voulais etre bien sur d avoir compris ta proposition.

                              mais c etrange que les sorties du arduino ne marchent pas

                              (les deux codes, séparément fonctionnent tres bien pourtant)

                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 juin 2013 à 12:39:43

                                int led[11] = {0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11}; 
                                int leftChannel = 0; 
                                int left, i;
                                
                                int current;
                                
                                
                                int highest = 60;
                                
                                
                                int latchPin = 8;
                                int clockPin = 12;
                                int dataPin = 13;
                                
                                int volume[9] = {0b00000000, 0b00000001, 0b00000011, 0b00000111,
                                                 0b00001111, 0b00011111, 0b00111111, 0b01111111,
                                                 0b11111111};
                                                 
                                void setup()
                                {
                                  for (i = 0; i < 11; i++)  
                                  pinMode(led[i], OUTPUT);
                                  
                                  pinMode(latchPin, OUTPUT);
                                  pinMode(clockPin, OUTPUT);
                                  pinMode(dataPin, OUTPUT);
                                  Serial.begin(9600);
                                }
                                
                                
                                void loop() {
                                
                                  
                                  
                                  
                                  left = analogRead(leftChannel);  
                                
                                left = left / 10;    
                                
                                
                                  if (left == 0)  
                                   {
                                   for(i = 0; i < 11; i++)
                                     {
                                     digitalWrite(led[i], LOW);
                                     }
                                  }
                                  
                                  else
                                  {
                                   for (i = 0; i < left; i++) 
                                    {
                                     digitalWrite(led[i], HIGH);
                                    }
                                    
                                    for(i = i; i < 11; i++)  
                                     {
                                      digitalWrite(led[i], LOW);
                                     }
                                  }
                                  
                                  if (led[11] = HIGH)
                                  
                                  {  
                                 current = map(left, 0, highest, 0, 9);
                                 
                                  digitalWrite(latchPin, LOW);
                                  
                                  
                                  shiftOut(dataPin, clockPin, LSBFIRST, volume[current]);
                                   
                                  
                                  digitalWrite(latchPin, HIGH);
                                  
                                  }
                                  
                                  
                                  
                                }
                                

                                ce programme fonctionne bien (pour résumer : c'est un vu-metre composé de 11 sorties d'un arduino uno et 8 d'un 74HC595)

                                les sorties du 74HC595 démare bien qd la dernière sortie du arduino marche.

                                mon seul pb c'est que les sorties du 74HC595 s'allument presque toutes en mm tps au lieu de varier.

                                je ne sais pas trop quel parametre changer pour avoir les variations

                                -
                                Edité par costiflex 4 juin 2013 à 13:10:19

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  4 juin 2013 à 13:21:35

                                  ligne 62 : met un == et remplace le led[11] par led[10]

                                  -
                                  Edité par Eskimon 4 juin 2013 à 13:22:25

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Retrouvez moi sur mon blog et ma chaine Youtube !

                                    4 juin 2013 à 13:45:03

                                    bonjour Eskimon,

                                    merci pour ta réponse.

                                    ça donne ça :

                                     if (led[10] == HIGH)
                                      
                                      {  
                                     current = map(left, 0, highest, 0, 9);
                                     
                                      digitalWrite(latchPin, LOW);
                                      
                                      
                                      shiftOut(dataPin, clockPin, LSBFIRST, volume[current]);
                                       
                                      
                                      digitalWrite(latchPin, HIGH);

                                    mais du coup, les leds du 74HC595 ne s'allument plus :o

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      4 juin 2013 à 13:51:00

                                      att, j'ai peut etre trouvé
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        4 juin 2013 à 14:52:03

                                        en meme temps je dis des betises aussi... le if(LED[10] == HIGH) vaudra toujours true je suppose puisque c'est la déclaration d'une broche (et donc n'a rien à voir avec l'état de la broche en question)

                                        Je te laisse encore chercher un peu ;)

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Retrouvez moi sur mon blog et ma chaine Youtube !

                                          4 juin 2013 à 19:25:23

                                          en effet...

                                          mais je ne vois pas trop comment dire que si la broche 11 est active, démarrer l'autre programme :o

                                          je pense que ça serait genre :

                                          ... "output[11] ==HIGH" ...

                                          c'est if (digitalRead(10) == HIGH)

                                          ou pas ?

                                          -
                                          Edité par costiflex 4 juin 2013 à 20:53:25

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            4 juin 2013 à 20:58:50

                                            je pense que c'est ça car ça fonctionne.

                                            cependant les sorties 0 et 1 de mon arduino uno sont tjrs allumées meme quand il n'y a pas de musique.

                                            :waw:...

                                            -
                                            Edité par costiflex 4 juin 2013 à 21:46:28

                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            programmer arduino + ez expander

                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                            • Editeur
                                            • Markdown