petit soucis // lib softPWM

bonjour,
je viens vers vous car j’ai un petit pblm et je ne sais pas comment le résoudre.

je souhaite controler 32 pin d’une arduino mega pour avoir en PWM 32 groupes de leds. pour ça j’utilise les pin 2 à 13 en “analogWrite”, et les pins 14 à 34 en “softPWMSet” grace à la lib softPWM.
Le tout controlable en dmx grace à ce shield (http://dmxshield.blogspot.fr/2013/04/low-priced-dmx-rdm-shield-for-arduino.html) et la lib conceptinetics.

j’ai fait un bout de code, et je constatais des scintillement, les pins en softPWM avaient l’air de repasser par 0 brievement et régulièrement.
j’ai modifier le code pour avoir 4 lecture de dmx successive et renvoyer la moyenne aux leds.
les passage par 0 se sont espacé mais restent là…

je vous met le code ; je prends toutes les bonnes idées ; merci…


#include <Conceptinetics.h>
#include <SoftPWM.h>

#define DELAY 90


// le nombre de canaux
#define DMX_SLAVE_CHANNELS   32 
// le shield DMX en slave
DMX_Slave dmx_slave (DMX_SLAVE_CHANNELS) ;




void setup() {             

 
  // débuter la reception dmx
  dmx_slave.enable ();  
  
  // adresse de départ
  dmx_slave.setStartAddress (1);
  
  //démarrer softPWM
  SoftPWMBegin();
  
  //definir les temps de fade
  SoftPWMSetFadeTime(ALL, 100, 550);

 
}



void loop() 
{
  
  //declarer les valeures
  int dmxInput1[32];
  int dmxInput2[32];
  int dmxInput3[32];
   int dmxInput4[32];
  int intens [32];
  
  
 //lire les 32 canaux dmx une première fois
 
  for (int x= 0; x<32; x++){
dmxInput1[x]= dmx_slave.getChannelValue (x+1);
  }  
// attendre une autre trame dmx

delay (60);

// lire les 32 canaux dmx une seconde fois

 for (int x= 0; x<32; x++){
dmxInput2[x]= dmx_slave.getChannelValue (x+1);
 if (dmxInput2[x]=0){
   dmxInput2[x]=dmxInput1[x];
 }
 }
delay (30);

 // une 3e fois
 for (int x= 0; x<32; x++){
dmxInput3[x]= dmx_slave.getChannelValue (x+1);
 
 if (dmxInput3[x]=0){
   dmxInput3[x]=dmxInput2[x];
 }
 }
 delay (30);
 
 
 // et encore
for (int x= 0; x<32; x++){
dmxInput4[x]= dmx_slave.getChannelValue (x+1);
 if (dmxInput4[x]=0){
   dmxInput4[x]=dmxInput3[x];
 }
 }

 
 
 
 
 // faire la moyenne des 4 lectures
for (int x= 0; x<32; x++){
  int pin=x+2;
intens[x]= dmxInput1[x] + dmxInput2[x];
intens[x]=intens[x]+dmxInput3[x];
intens[x]=intens[x]+dmxInput4[x];
intens[x]=intens[x]/4;


//envoyer les infos en analog write sur les pin 2 à 13
if (x<12){
 analogWrite (pin,intens [x]);

}

//envoyer l'info sur les pins 14 à 33 en soft pwm
if (x>11){
  
SoftPWMSet (pin, intens[x]);



}

}



  }