[debutant] gestion blink led ws2812

Bonjour,

Je patauge un peu sur le net suite à mon project.

J ai effectuer une petite programmation pour une séquence de jeux de lumière dans le cadre d une décoration sur theme back to the futur.

Afin de vous faire comprendre mon besoin je détail le project.

J ai une voiture qui effectuer un jeux de lumière (via un bouton poussoir gérer à l. Arduino)

Ensuite j ai 2 plaque de led ws2812 en série une 16x16 et une 8x8.

Suivant un timer, Elles effectuent divers événement.

Mon dernier événement j aimerai que toute les led de la. Plaque 8x8 flash 3-4 fois en blanc

Led numéroter de 257 à 322.

Je ne trouve pas l'Information comment assigner ce groupe de led en une fois.

Début de mon code pour cette evenement

else if ( evenement==2)
    {  for 
} 

Merci d avance.

Avec une boucle for allant de de 257 à 322. Ça ne se fait pas en une fois sans doute (mais on ne sait pas quel arduino, quelle alim, quelle code etc…)

:warning: La rédaction de votre message ne répond pas aux critères attendus. Il n’aura sans doute pas de réponse tant que vous n’aurez pas pris en compte et mis en application les recommandations listées dans « Les bonnes pratiques du Forum Francophone”

Je suis sur un arduino nano v3. Les led sont alimenter en extérieur.

Après si ne me trompe, le reste du code ne sert à rien. étant donner que je cherche une solution pour faire un effect de flash sur la deuxième série de led.

Mais je post ici mon code complet.

#include <Adafruit_NeoPixel.h>

#define MOSFET_PIN  5
#define LED_PIN     6
#define LED_COUNT   256
long randNumber;  //Pixel random number variable
long randNumberR;  //RED random number variable
long randNumberG;  //GREEN random number variable
long randNumberB;  //BLUE random number variable
int numPixels = 256;

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

unsigned long time=0;

void setup() {
  pinMode(MOSFET_PIN, OUTPUT);
  digitalWrite(MOSFET_PIN,0);
  Serial.begin(115200);
  strip.begin();           
  strip.show();            
  strip.setBrightness(5); 
  time=millis();
  randomSeed(analogRead(0)); 
}


unsigned long delta;
unsigned long seconds=0;

unsigned led1effect=15;
unsigned mosfeteffect=10;
unsigned ledmode=0;
unsigned ledidx=0;

void loop() 
{
  delta=millis()-time;

  if(delta>1000)
  {
    Serial.println("tick");
    time=millis();
    seconds++;   
    led1effect--;
    mosfeteffect--;

    if(mosfeteffect==0)
    {
      strip.show();
      mosfeteffect=10;
      digitalWrite(MOSFET_PIN,1);
      delay(20);
      digitalWrite(MOSFET_PIN,0);
    }
      
    if(led1effect==0)
    {
      
      led1effect=15;
      ledmode=(ledmode+1)%3;
      Serial.print("effect ");
      Serial.println(ledmode);

      if(ledmode==0)
      {
        for(int i=17;i<32;i++)
        {
          strip.setPixelColor(i,0xFFFFFF);
          
        }
        for(int a=224;a<240;a++)
        {
          strip.setPixelColor(a,0xFFFFFF);
          
        }
        delay(10);
      }
      else if(ledmode==1)
      {
        for(int i=17;i<32;i++)
        {
          strip.setPixelColor(i,0xfe1b00);
          
        }
        
        for(int b=224;b<240;b++)
        {
          strip.setPixelColor(b,0xfe1b00);
         
        }
       delay(10);
      }
      else if(ledmode==2)
      {
        for(int i=60;i<200;i++)
        {
          strip.setPixelColor(i,0xFF0000);
                  }
        
      }
      
      }      
      
    }
  

if(led1effect==0)
{
  randNumber = random(0, numPixels);  //pick random pixel between 0 and maximum number of pixels
  randNumberR = random(0, 128);   //Random RED value
  randNumberG = random(0, 128);   //Random GREEN value
  randNumberB = random(0, 128);   //Random BLUE value
  randomPixel(strip.Color(randNumberR, randNumberG, randNumberB), 100);
}
 


 
  
  
  
delay(10);
  

}

void randomPixel(uint32_t c, uint8_t wait)
{
  for (int i = 0; i < strip.numPixels(); i = i++)
  {
    strip.setPixelColor(randNumber, c);    //turn random pixel on
  }
  

  
}

Est ce il serai préférable de séparer de pin les deux série de led ?

Merci pour ces éléments

Vous affectez déjà un ensemble de pixels avec une boucle for plusieurs fois en faisant

Je ne comprends pas votre question. Pouvez vous clarifier ?

Bonjour wspawn

Attribuer tout un groupe, je ne crois pas que cela existe sur ces LED, toutes les LED, oui strip.fill ?
Mais peut être ça devrai jouer.

#include <Adafruit_NeoPixel.h>
#define LED_PIN     6
#define LED_COUNT   256

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() 
{
  strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip.show();            // Turn OFF all pixels ASAP
  strip.setBrightness(255); // Set BRIGHTNESS to about 1/5 (max = 255)	
  
  stripFlash(LED_COUNT, 5);
}
void loop() 
{
}

void stripFlash(int ledNbr, int flashNbr)
{
	for (int f = 0; f < flashNbr; f++)
	{
		for (int l = 0; l < ledNbr; l ++)
		{
			strip.setPixelColor(l, 255, 255, 255);
		}
		strip.show();
		delay(100);
		

		for (int l = 0; l < LED_COUNT; l ++)
		{
			strip.setPixelColor(l,0, 0, 0);
		}
		strip.show();
		delay(500);
	}
}

Mais, attention les yeux!!!

Cordialement
jpbbricole

Bonjour wspawn

J'avais mal lu la question, j'ai adapté mon programme à celle-ci:

#include <Adafruit_NeoPixel.h>
#define LED_PIN     6
#define LED_COUNT   256

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() 
{
  Serial.begin(115200);
  
  strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip.show();            // Turn OFF all pixels ASAP
  strip.setBrightness(255); // Set BRIGHTNESS to about 1/5 (max = 255)	
  
  stripFlash(10, 12, 5);
}
void loop() 
{
}

void stripFlash(int ledStart, int ledEnd, int flashNbr)
{
	for (int f = 0; f < flashNbr; f++)
	{
		for (int l = ledStart; l <= ledEnd; l ++)
		{
			strip.setPixelColor(l, 255, 255, 255);
		}
		strip.show();
		delay(100);
		

		for (int l = 0; l < LED_COUNT; l ++)
		{
			strip.setPixelColor(l,0, 0, 0);
		}
		strip.show();
		delay(500);
	}
}

Cordialement
jpbbricole

La solution de @jpbbricole correspond très bien au besoin du flash - en prime sous forme de fonction paramètrèe. :clap:

C’est bloquant pendant le flash cependant d’où ma question sur l’expression du besoin.

Super merci je regarde à cela. L événement flash est l événement final. Sa gêne nullement que plus rien d autre ne s effectué.

Je revient vers vous après mes tests

un grand merci a vous c'est Nikel avec ce code .. je vous offre la preview du Project , qui a super avancer depuis . ici en video

Si sa peu aider d'autres, voici mon code .

#include <Adafruit_NeoPixel.h>

#define MOSFET_PIN  5
#define LED_PIN     6
#define LED_COUNT   320
long randNumber;  //Pixel random number variable
long randNumberR;  //RED random number variable
long randNumberG;  //GREEN random number variable
long randNumberB;  //BLUE random number variable
int numPixels = 320;

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

unsigned long time=0;

void setup() {
  pinMode(MOSFET_PIN, OUTPUT);
  digitalWrite(MOSFET_PIN,0);
  Serial.begin(115200);
  strip.begin();           
  strip.show();            
  strip.setBrightness(55); 
  time=millis();
 
  
  
}


unsigned long delta;
unsigned long seconds=0;

unsigned led1effect=25;
unsigned mosfeteffect=10;
unsigned ledmode=0;
unsigned ledidx=0;

void loop() 
{
  delta=millis()-time;

  if(delta>1000)
  {
    Serial.println("tick");
    time=millis();
    seconds++;   
    led1effect--;
    mosfeteffect--;

    if(mosfeteffect==0)
    {
      
      mosfeteffect=40;
      digitalWrite(MOSFET_PIN,1);
      delay(1000);
      digitalWrite(MOSFET_PIN,0);
    }
      
    if(led1effect==0)
    {
      
      led1effect=25;
      strip.clear();

      ledmode=(ledmode+1)%3;
      Serial.print("effect ");
      Serial.println(ledmode);

      
        for(int i=16;i<32;i++)
        {
          strip.setPixelColor(i,0xFFFFFF);
          strip.setPixelColor(63-i,0xFFFFFF);
          strip.setPixelColor(i+192,0xFFFFFF);
          strip.setPixelColor(255-i,0xFFFFFF);
          delay(100);
          strip.show();
        }
        
      
      
        for(int i=16;i<48;i++)
        {
          strip.setPixelColor(i,0xfe1b00);
          strip.setPixelColor(63-i,0xfe1b00);
          strip.setPixelColor(i+192,0xfe1b00);
          strip.setPixelColor(255-i,0xfe1b00);
          
          delay(100);
          strip.show();
        }
        
                   
             stripFlash(257, 320, 5);
        
      
      
      }      
      
    }
  

if(led1effect!=0)
{
  {
    randPixels(32,125);
  }
}
 


 
  
  
  

  

}

void randPixels(uint32_t numpx,uint8_t wait)
{
  for (int i = 0; i < strip.numPixels(); i++)
  {
    strip.setPixelColor(i, 0);
  }  
  for(int i=0;i<numpx;i++)
  {
    randNumber = random(0, numPixels);  //pick random pixel between 0 and maximum number of pixels
    randNumberR = random(0, 128);   //Random RED value
    randNumberG = random(0, 128);   //Random GREEN value
    randNumberB = random(0, 128);   //Random BLUE value
    strip.setPixelColor(randNumber,strip.Color(randNumberR, randNumberG, randNumberB));  
  }
  strip.show();
  delay(wait);  
}

void stripFlash(int ledStart, int ledEnd, int flashNbr)
{
  for (int f = 0; f < flashNbr; f++)
  {
    for (int l = ledStart; l <= ledEnd; l ++)
    {
      strip.setPixelColor(l, 255, 255, 255);
    }
    strip.show();
    delay(20);
    for (int l = 0; l < LED_COUNT; l ++)
    {
      strip.setPixelColor(l,0, 0, 0);
    }
    strip.show();
    delay(500);

    
  }
}

Bonsoir wspawn

Superbe résultat, attention les yeux :clap:
Bonne continuation.

Cordialement
jpbbricole