Partage
  • Partager sur Facebook
  • Partager sur Twitter

arduino+dmx512+ projecteur

difficulté de programmation

    10 mars 2014 à 14:36:42

    Bonjour, je ne suis pas très doué en informatique et j'aurais besoin d'aide, des bases pour réaliser quelquechose:

    je travaille sur le modèle de projecteur de la marque freedom par quad 5.
    Comme problématique je dois "réaliser un programme permettant de piloter, grâce au Monitor de ARDUINO, l’intensité lumineuse du rouge, du vert et du bleu du FDPARQ5 (mise en œuvre de l’émission par ARDUINO d’un signal DMX512)." 

    Pourriez vous me donner les bases , sil vous plaît?:)

    • Partager sur Facebook
    • Partager sur Twitter
      10 mars 2014 à 14:51:15

      voici le début de mon programme, il concerne uniquement les variations de l intensité lumineuse:

      #include <DmxSimple.h>

      void setup() 

      {

        DmxSimple.usePin(7);

        DmxSimple.maxChannel(4);

        // Init Monitor

        Serial.begin(9600);

        Serial.println("test");

        Serial.println();

      }

      void loop() 

      int ledR= 1;//led rouge

      int ledV= 1;//led verte

      int ledB= 1;//led bleue

      int i;

      void setup()

      {

        pinMode(ledR, OUTPUT);

        pinMode(ledV, OUTPUT);

        pinMode(ledB, OUTPUT);

      }

      void loop()

      {

        analogWrite(ledR, HIGH);

        delay(3000);

        for(i=0; i<= 255; i++)

        {

        analogWrite(ledR, i);

        delay(30);

        }  

        for(i=255; i>= 0; i--)

        {

        analogWrite(ledR, i);

        delay(30);

        }

        analogWrite(ledV, HIGH);

        delay(3000);

        for(i=0; i<= 255; i++)

        {

        analogWrite(ledV, i);

        delay(30);

        }  

        for(i=255; i>= 0; i--)

        {

        analogWrite(ledV, i);

        delay(30);

        }

        analogWrite(ledB, HIGH);

        delay(3000);

        for(i=0; i<= 255; i++)

        {

        analogWrite(ledB, i);

        delay(30);

        }  

        for(i=255; i>= 0; i--)

        {

        analogWrite(ledB, i);

        delay(30);

        }

      }

      • Partager sur Facebook
      • Partager sur Twitter
        10 mars 2014 à 15:32:26

        voici une nouvelle version du programme:

        #include <DmxSimple.h>

        void setup() 

        {

          DmxSimple.usePin(7);

          DmxSimple.maxChannel(4);

          // Init Monitor

          Serial.begin(9600);

          Serial.println("test");

          Serial.println();

        }

        void loop() 

        int ledR= 0;

        ledR= analogRead (A0) /4

        int ledV= 0;

        ledV= analogRead (A0) /4

        int ledB= 0;

        ledB= analogRead (A0) /4

        int i;

        void setup()

        {

          pinMode(ledR, OUTPUT);

          pinMode(ledV, OUTPUT);

          pinMode(ledB, OUTPUT);

        }

        void loop()

        {

          analogWrite(ledR, HIGH);

          delay(1000);

          for(i=0; i<= 255; i++)

          {

          analogWrite(ledR, i);

          delay(30);

          }  

          for(i=255; i>= 0; i--)

          {

          analogWrite(ledR, i);

          delay(30);

          }

          analogWrite(ledV, HIGH);

          delay(1000);

          for(i=0; i<= 255; i++)

          {

          analogWrite(ledV, i);

          delay(30);

          }  

          for(i=255; i>= 0; i--)

          {

          analogWrite(ledV, i);

          delay(30);

          }

          analogWrite(ledB, HIGH);

          delay(1000);

          for(i=0; i<= 255; i++)

          {

          analogWrite(ledB, i);

          delay(30);

          }  

          for(i=255; i>= 0; i--)

          {

          analogWrite(ledB, i);

          delay(30);

          }

          Serial.println("ledR = ");

          Serial.println(ledR);

          Serial.println("ledV = ");

          Serial.println(ledV);

          Serial.println("ledB = ");

          Serial.println(ledB);

        }

        • Partager sur Facebook
        • Partager sur Twitter
          10 mars 2014 à 16:04:44

          alors. je vais te faire quelques remarques, pour le bien de tous: 1) essaie de poster dans la sections de forum adaptée à ton probleme (je vais déplacer ton topic vers la section électronique, donc) 2) place ton code entre des balises spécialisées si tu ne sais pas quel langage mettre, mets C ou C++, le langage arduino en étant très proche... (c'est un bouton qui ressemble à ça: </>) ça rend le code lisible, plus compact, et nous quand on cherche à aider, on préfere. (tu peux utiliser le bouton modifier sur tes anciens posts, ça t'évitera de reposter après) 3) ton code parait completement fou: 2 setup et 2 loop. essaie de segmenter entre 3 blocs de code pour expliquer qui fait quoi, voire d'y mettre des commentaires, ça mange pas de pain, et nous on comprend ce que tu fais, ou cherche à faire.

          -
          Edité par remace 10 mars 2014 à 16:06:19

          • Partager sur Facebook
          • Partager sur Twitter

          oui. non. enfin je regarde et je te dis.

            13 mars 2014 à 12:36:29

            je suis déja dans la section éléctronique mais je vais reposter un sujet merci
            • Partager sur Facebook
            • Partager sur Twitter
              13 mars 2014 à 13:16:51

              NON! je viens de mettre ton sujet (celui dans lequel on est) dedans, il était dans C++ avant.

              • Partager sur Facebook
              • Partager sur Twitter

              oui. non. enfin je regarde et je te dis.

                13 mars 2014 à 18:21:57

                Et la remarque :

                2) place ton code entre des balises spécialisées si tu ne sais pas quel langage mettre, mets C ou C++, le langage arduino en étant très proche... (c'est un bouton qui ressemble à ça: </>) ça rend le code lisible, plus compact, et nous quand on cherche à aider, on préfere. (tu peux utiliser le bouton modifier sur tes anciens posts, ça t'évitera de reposter après)

                Tiens toujours si tu veux de l'aide :)

                • Partager sur Facebook
                • Partager sur Twitter

                Retrouvez moi sur mon blog et ma chaine Youtube !

                  13 mars 2014 à 20:26:02

                  Bon, vu que l'autre sujet a été fermé, je remets le contexte ici.

                  Nouveau code :

                  #include <DmxSimple.h>
                   
                  void setup()
                  {
                    int ledR;
                    int ledB;
                    int ledV;
                    DmxSimple.usePin(7);//utilsiation branche 7
                    DmxSimple.maxChannel(4);
                     
                    // Initialisation Monitor
                    Serial.begin(9600);
                    Serial.println("test");
                    Serial.println();
                    Serial.println("Syntax");
                    Serial.println(" 123c : use DMX channel 123");
                    Serial.println(" 45w : set current channel to value 45");
                     
                    //mode sortie pour le pin
                    pinMode(ledR, OUTPUT);//la branche est paramétré comme une sortie
                    pinMode(ledV, OUTPUT);
                    pinMode(ledB, OUTPUT);
                     
                  }
                   
                  int value = 0;
                  int channel;
                   
                  void loop()
                  {
                     
                  int brightness;//boucle for pour la luminosite (en dessous)
                  for (brightness = 0; brightness <= 255; brightness++)
                    {
                      DmxSimple.write(1,brightness); //pour le canal 1 donner une valeur
                      delay(10);
                       
                    }
                  int c;
                   
                  while(!Serial.available());
                  c = Serial.read();
                  if ((c>='0') && (c<='9'))
                  {
                      value = 10*value + c - '0';//j'ai trouve cette ligne sur internet sur un meme type de sujet mais je ne la comprends pas
                  }
                    else
                  {
                    if (c=='c') channel = value;
                    else if (c=='w')
                    {
                      DmxSimple.write(channel, value);
                      Serial.println();
                    }
                    value = 0;
                  }
                   
                   
                  ledR= analogRead (A1) /4; //conversion sur 8 bits car liaison dmx code sur 10 bits
                  ledV= analogRead (A2) /4;
                  ledB= analogRead (A3) /4;
                   
                  }

                  A cela, je ne vois pas trop quoi ajouter ...

                  Quel est le problème ? Quel résultat obtiens tu avec ce code ? Quel résultat aurait tu voulu avoir ?

                  Concernant la ligne suivante, voici quelques explications :

                  value = 10*value + c - '0';//j'ai trouve cette ligne sur internet sur un meme type de sujet mais je ne la comprends pas

                  Un micro ne travaille qu'avec des nombres, pas des caractères.

                  Il existe une table qui fait une correspondance entre caractère et nombre : la table ASCII.

                  Dans cette table, on voit clairement que le caractère 0 correspond au nombre 48.

                  En claire, pour convertir le caractère 0 en nombre 0, il faut soustraire 48 (ou soustraire le caractère 0, cela revient au même).

                  Du coup, c - '0' permet de passer du caractère x au nombre x ;)

                  Quand au fois 10, c'est tout simplement pour entrer un nombre petit à petit.

                  Exemple :

                  /!\ Dans ce code, il faut faire la distinction entre :
                  - '1' (qui représente le caractère 1 soit le nombre 49 si l'on utilise la table ASCII) 
                  et 
                  - 1 (qui représente le nombre 1)
                  ==========
                  Donc, pour cette exemple ; si je tape 1, puis 2, puis 3 alors voici ce qu'il se passe :
                  Au départ value vaut 0 donc on a :
                  value = value * 10 + c - '0'
                  value = 0 * 10  + '1' - '0'
                  value = 0 + '1' - '0'
                  value = 0 + 49 - 48
                  value = 1
                  Après avoir tapé mon 1, value = 1
                  Après avoir tapé 2, voici ce qu'il se passe :
                  value = value * 10 + c - '0'
                  value = 1 * 10  + '2' - '0'
                  value = 10 + '2' - '0'
                  value = 10 + 50 - 48
                  value = 12
                  Après avoir tapé mon 2, value = 12
                  De même, après avoir tapé 3, value vaudra 123
                  ==========
                  Bref, cette ligne permet de convertir une suite de caractère (reçue par le Serial par exemple) en un nombre.






                  • Partager sur Facebook
                  • Partager sur Twitter

                  arduino+dmx512+ projecteur

                  × 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