Go Down

Topic: PWM multiples sorties (Read 419 times) previous topic - next topic

Magicflash

Bonjour à tous!

Mon premier projet arduino et je sèche un peu...

je travaille sur une arduino qui reçoit du DMX (protocole lumière liaison série) donc un signal de 0 a 255

j'allume grâce à lui plusieurs leds (3 au total) contrôlées en PWM

jusqu'ici pas de soucis, une lecture d'un circuit associée à une sortie physique de la carte...

Mais je cherche à modifier mon code pour allumer mes 3 leds en même temps (broches 9-10-11) avec le même circuit, à savoir le 1

Code: [Select]


const int Led1 = 9;
const int Led2 = 10;
const int Led3 = 11;

}


void loop()
{

    analogWrite (Led1 ,dmx_slave.getChannelValue (2));
    analogWrite (Led2 ,dmx_slave.getChannelValue (3));
    analogWrite (Led3 ,dmx_slave.getChannelValue (4));
   




voici un extrait de mon code.

tout est pour le mieux, mon dmx_slave me donne entre 0 et 255 et analogWrite me le donne de 0 a 255 sur la led et j'ai une belle gradation!


mais comment avoir Led 1 + 2 + 3 avec mon dmx_slave.getChannelValue (1) ?

D'avance merci pour vos conseils!

Magicflash

bouault

Bonjour,
c'est très simple il suffit de faire :
Code: [Select]

    analogWrite (Led1 ,dmx_slave.getChannelValue (1));
    analogWrite (Led2 ,dmx_slave.getChannelValue (1));
    analogWrite (Led3 ,dmx_slave.getChannelValue (1));

Note que tu pourrais aussi simplement mettre les trois leds en parallèle, à condition de ne pas dépasser les 20 mA que peu fournir la pin arduino ou d'utiliser un transistor.

Une bonne habitude pour piloter plusieurs sorties est de faire un tableau :
Code: [Select]

const int Led[3]={9,10,11};

Puis une boucle for :
Code: [Select]

for(int i=0;i<3;i++)
{
   analogWrite (Led[i] ,dmx_slave.getChannelValue (1));
}



Quelle librairie DMX utilise-tu ?
Jacques
arpschuino.fr

bouault

Mais peut-être tu veux faire du HTP, c'est à dire la led prend le niveau le plus élevé  ?
Il va alors falloir utiliser la condition if.
"si le circuit 2 est plus élevé que le circuit 1, prend le niveau du circuit 2
sinon prend le niveau du circuit 1"
Je te laisse chercher comment l'écrire, fait le d'abord pour un circuit et ensuite tu pourras l'appliquer au trois dans la boucle for.
A bientôt,
Jacques
Jacques
arpschuino.fr

Magicflash

Yes!

merci beaucoup je commençais à avoir le cerveau en fusion avec la progra pourtant c'était aussi simple!

j'utilise la librairie conceptinetics https://sourceforge.net/p/dmxlibraryforar/wiki/Home/

je l'utilise sans shield directement avec un Max 485.


Merci encore!

Magicflash

Alors non ça ne fonctionne pas,

je veux dire oui les 3 leds s'allument mais elles clignotent, de même sur mes circuits 2,3 et 4 elles clignotent lors de la gradation


Est-ce une histoire de HTP?

Pourtant je ne devrai avoir un conflit que lorsque j'essaie d'allumer simultanément les 3 leds avec le 1 et une des 3 leds indépendantes...


pour info j'aurai pu les metrre en parallèle mais je souhaitais garder 3 leds indépendantes en PWM ;)

bouault

#5
May 12, 2016, 12:44 am Last Edit: May 12, 2016, 12:51 am by bouault
Je ne connais pas cette lib, j'utilise dmx four universe :
http://www.deskontrol.net/blog/arduino-four-universes-dmx-512-library/
Il y a des exemples sur mon site.
Le mieux serait que tu poste ton code en entier.
Si tu demande à  ta led d'appliquer le niveau du circuit 1 puis celui du circuit 2 par exemple, bien sur ça clignote.
Dans ce cas il faut que tu compare les niveaux par exemple du circuit 1 et du 2, et que tu applique le plus élevé.
Code: [Select]

if (dmx_slave.getChannelValue (1)>dmx_slave.getChannelValue (2))
{
      analogWrite (Led[1] ,dmx_slave.getChannelValue (1));
}
else
{
      analogWrite (Led[1] ,dmx_slave.getChannelValue (2));
}

C'est ce que j'expliquais dans mon deuxième post.
N'oublie pas que le DMX envoie les niveaux de chacun des circuits en permanence, ou plus exactement une quarantaine (de mémoire) de fois pas seconde.
Jacques
arpschuino.fr

Go Up