Clignotement de ruban led peu agréable

bonjour, j'ai un soucis avec mon code. Déja mon projet est de faire un ruban de led (coupé en 3 partie) qui réagie a de la musique (ou autre son ambiant) mais mon problème est que vue que je dois allumer et éteindre des led rapidement ça provoque un clignotement qui est pas du tous agréable.
Si quelqu'un à la solution.

voici mon code:

#include <FastLED.h>
#include <Adafruit_NeoPixel.h>

//nom de chaque broche 
#define LED_PIN 3
#define N_LED 60
#define CAPTEUR A0 
#define BOUTON 2


//configuration des leds
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LED, LED_PIN, NEO_RGB + NEO_KHZ400);


//variables 
 int RC = 0;  //VERT
 int GC = 0;  //ROUGE
 int BC = 0;  //BLEU
 int valeur = 0; //boucle de variation des led 
 int val = 0;  //boucle de variation des led
 int valcouleur = 0;  //choix de la couleur 
 const int lumi = 9; //luminosité de la bande led 
 int couleur = 5;  //pour définir la couluer (voir boucle des couleur)
 int v = 0; 

  
void setup()
{
  strip.begin();
  Serial.begin(9600);
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(3, OUTPUT);
  pinMode(6, INPUT);
}

void loop()
{
  //valeur = analogRead(A1);
  int MICRO = analogRead(A1);
  setcouleur();
  strip.setBrightness(lumi);
  Serial.println(valeur);
  valeur = map(MICRO, 210, 450, -90, 1001);
  delay(5);
  
//changement couleur avec bouton poussoir (ne marche pas )
if (digitalRead(6) == HIGH) {
  couleur = (couleur + 1) % 4;
  Serial.println("+1");
  delay(500);
}


 //variation des led en fonction du bruit ambiant
 if (valeur > 1001){
  strip.clear();
  strip.fill(strip.Color(0, 255, 0), 0, 60);
  strip.setBrightness(lumi);
  strip.show();
 }
  else if (valeur < 1000 && valeur >= 51){
  strip.clear();
  strip.setBrightness(lumi);
  val = valeur/51;
  strip.fill(strip.Color(RC, GC, BC), 0, val+1);
  for(int i = 20; i < 20+val; i++){
    strip.setPixelColor(i, strip.Color(RC, GC, BC));
  }
  for(int i = 40; i < 40+val; i++){
    strip.setPixelColor(i, strip.Color(RC, GC, BC));
    for (v = 0; v == lumi; v++){
      
    }
  } 
  strip.show();
     }
  else if (valeur == 0){
  strip.clear();
  /*strip.setPixelColor(0, strip.Color(RC, GC, BC));
  strip.setPixelColor(20, strip.Color(RC, GC, BC));
  strip.setPixelColor(40, strip.Color(RC, GC, BC));*/
  strip.show();
  } 
  
  else{
    //strip.clear();
    strip.show();
  }
} 

void setcouleur(){ //boucle des couleurs
    /*RC = 0; //random(100, 150); //VERT //0;
    GC = 70; //random(0, 100);   //ROUGE //70;
    BC = 255; //random(150, 255);  //bLEU  //255; */
    if (couleur == 0){//bleu cyan
      valcouleur = analogRead(CAPTEUR);
      valcouleur = map(valcouleur, 0, 1023, 0, 255); 
      RC = valcouleur; 
      GC = 0; 
      BC = valcouleur;
    }
    else if (couleur == 1) { //rose/violet
      valcouleur = analogRead(CAPTEUR);
      valcouleur = map(valcouleur, 0, 1023, 0, 255); 
      RC = 0; 
      GC = 70; 
      BC = valcouleur;
      strip.show();
    }
    else if (couleur == 2) { //rouge
      valcouleur = analogRead(CAPTEUR);
      valcouleur = map(valcouleur, 0, 1023, 0, 255); 
      RC = 0; 
      GC = valcouleur; 
      BC = 0;
      strip.show();
    }
    else if (couleur == 3) { //orange/rouge
      valcouleur = analogRead(CAPTEUR);
      valcouleur = map(valcouleur, 0, 1023, 150, 0); 
      RC = valcouleur; 
      GC = 255; 
      BC = 0;
      strip.show();
    }
    else if (couleur == 4) { //blanc
      valcouleur = analogRead(CAPTEUR);
      valcouleur = map(valcouleur, 0, 1023, 0, 255); 
      RC = valcouleur; 
      GC = valcouleur; 
      BC = valcouleur;
      strip.show();
    }
    else if (couleur == 5) { //vert
      valcouleur = analogRead(CAPTEUR);
      valcouleur = map(valcouleur, 0, 1023, 170, 255); 
      RC = valcouleur; 
      GC = 0; 
      BC = 0;
      strip.show();
    }
  }

Bonjour Thomas
Peut-être une solution en cherchant Neopixel fade in

Cordialement
jpbbricole

hello
un bout de solution: il n'est pas nécessaire d'enchainer une dizaines de if si le 1er est le bon
nota: tu aurais pu utiliser "switch"
à tester, ( sans garantie d'amélioration)

#include <FastLED.h>
#include <Adafruit_NeoPixel.h>

//nom de chaque broche
#define LED_PIN 3
#define N_LED 60
#define CAPTEUR A0
#define BOUTON 2


//configuration des leds
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LED, LED_PIN, NEO_RGB + NEO_KHZ400);


//variables
int RC = 0;  //VERT
int GC = 0;  //ROUGE
int BC = 0;  //BLEU
int valeur = 0; //boucle de variation des led
int val = 0;  //boucle de variation des led
int valcouleur = 0;  //choix de la couleur
const int lumi = 9; //luminosité de la bande led
int couleur = 5;  //pour définir la couluer (voir boucle des couleur)
int v = 0;


void setup()
{
  strip.begin();
  Serial.begin(9600);
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(3, OUTPUT);
  pinMode(6, INPUT);
}

void loop()
{
  //valeur = analogRead(A1);
  int MICRO = analogRead(A1);
  setcouleur();
  strip.setBrightness(lumi);
  Serial.println(valeur);
  valeur = map(MICRO, 210, 450, -90, 1001);
  delay(5);

  //changement couleur avec bouton poussoir (ne marche pas )
  if (digitalRead(6) == HIGH)
  {
    couleur = (couleur + 1) % 4;
    Serial.println("+1");
    delay(500);
  }


  //variation des led en fonction du bruit ambiant
  if (valeur > 1001)
  {
    strip.clear();
    strip.fill(strip.Color(0, 255, 0), 0, 60);
    strip.setBrightness(lumi);
    strip.show();
  }
  else
  {
    if (valeur < 1000 && valeur >= 51)
    {
      strip.clear();
      strip.setBrightness(lumi);
      val = valeur / 51;
      strip.fill(strip.Color(RC, GC, BC), 0, val + 1);
      for (int i = 20; i < 20 + val; i++) {
        strip.setPixelColor(i, strip.Color(RC, GC, BC));
      }
      for (int i = 40; i < 40 + val; i++) {
        strip.setPixelColor(i, strip.Color(RC, GC, BC));
        for (v = 0; v == lumi; v++) {

        }
      }
      strip.show();
    }
    else
    {
      if (valeur == 0)
      {
        strip.clear();
        /*strip.setPixelColor(0, strip.Color(RC, GC, BC));
          strip.setPixelColor(20, strip.Color(RC, GC, BC));
          strip.setPixelColor(40, strip.Color(RC, GC, BC));*/
        strip.show();
      }

      else
      {
        //strip.clear();
        strip.show();
      }
    }
  }
}

void setcouleur()
{ //boucle des couleurs
  /*RC = 0; //random(100, 150); //VERT //0;
    GC = 70; //random(0, 100);   //ROUGE //70;
    BC = 255; //random(150, 255);  //bLEU  //255; */
  if (couleur == 0)
  { //bleu cyan
    valcouleur = analogRead(CAPTEUR);
    valcouleur = map(valcouleur, 0, 1023, 0, 255);
    RC = valcouleur;
    GC = 0;
    BC = valcouleur;
  }
  else
  {
    if (couleur == 1) { //rose/violet
      valcouleur = analogRead(CAPTEUR);
      valcouleur = map(valcouleur, 0, 1023, 0, 255);
      RC = 0;
      GC = 70;
      BC = valcouleur;
      strip.show();
    }
    else
    {
      if (couleur == 2) { //rouge
        valcouleur = analogRead(CAPTEUR);
        valcouleur = map(valcouleur, 0, 1023, 0, 255);
        RC = 0;
        GC = valcouleur;
        BC = 0;
        strip.show();
      }
      else
      {
        if (couleur == 3) { //orange/rouge
          valcouleur = analogRead(CAPTEUR);
          valcouleur = map(valcouleur, 0, 1023, 150, 0);
          RC = valcouleur;
          GC = 255;
          BC = 0;
          strip.show();
        }
        else
        {
          if (couleur == 4) { //blanc
            valcouleur = analogRead(CAPTEUR);
            valcouleur = map(valcouleur, 0, 1023, 0, 255);
            RC = valcouleur;
            GC = valcouleur;
            BC = valcouleur;
            strip.show();
          }
          else
          {
            if (couleur == 5) { //vert
              valcouleur = analogRead(CAPTEUR);
              valcouleur = map(valcouleur, 0, 1023, 170, 255);
              RC = valcouleur;
              GC = 0;
              BC = 0;
              strip.show();
            }
          }
        }
      }
    }
  }
}

Un truc me parait bizarre, dans loop(), tu appelles setcouleur() qui affecte une couleur aux LED. Aussitôt après tu modifies l'état des LED en fonction du niveau capté par le micro.
Ce qui fait que tu alternes rapidement entre ces 2 modes, il me semble.

Ne pas mettre strip.show() dans la fonction setcouleur

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.