Couleur dans l'autre sens ruban led adafruit neopixel ada1376

Bonjour je voudrais savoir si si il existe une commande permettant de faire apparaitre une couleur progressive dans l'autre sens. Par exemple a la place qu'elle apparait de bas en haut , je voudrais qu'elle apparaisse de Haut en bas.

Bonne question, mais tu ne donnes pas assez d'info pour qu'on puisse y répondre précisément.

  • Quel matériel : carte Arduino et référence du ruban (voire un lien ou une photo) ?
  • Quelle bibliothèque : Adafruit Neopixel, FastLed, autre ?
  • Enfin "faire apparaitre une couleur progressive" : tu veux dire allumer les leds une par une dans un sens (disons depuis l'arduino vers l'autre bout) puis dans l'autre ?

J'utilise comme carte arduino la UNO , le référence du ruban led c'est le ADAFRUIT neopixel ada1376 ( donné dans le titre ).

Et j'utilise comme bibliothèque la Adafruit Neopixel.

Et oui c'est exactement ça, enfaite je voudrais quand mes leds s'allument il apparaissent d'un sens ( bas en haut dans mon cas ) , et quand elles s'eteignent dans l'autre sens ( haut en bas )

OK
As-tu déjà un bout de code pour l'allumer dans un sens ? Si oui, on peut t'aider à coder l'autre sens.

Yes, j'en ai un en gros il a chaque appuie il change de couleur.

En gros je voudrais que au 4ème appuie, il s'éteigne dans l'autre sens

#include <Adafruit_NeoPixel.h>
#include <avr/power.h>

#define PIN 6
#define pinBouton 5

int etatBouton = 0;
boolean etatSabre = 0;
int BoutonCounter;
// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);

//-------------Définition des Couleurs de bases---------------------------------------------------------------------------------------------//


void setup() {


  pinMode(pinBouton, INPUT_PULLUP);  // Configure pinBouton en entrée
  Serial.begin(9600);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'

}

void loop() {

  etatBouton = digitalRead(pinBouton);
  Serial.print("Etat Bouton = ");
  Serial.println(etatBouton);
  delay(100);

  if (etatBouton == 0)
  {
    BoutonCounter = BoutonCounter + 1;

    if (BoutonCounter == 1)
    {
      colorWipe(strip.Color(255, 0, 0), 25); //ROUGE
    }
    if (BoutonCounter == 2)
    {


      colorWipe(strip.Color(0, 255, 0), 25); // GREEN

    }
    if (BoutonCounter == 3)
    {
      colorWipe(strip.Color(0, 0, 255), 25); //BLUE


    }

if (BoutonCounter == 4)
{
      colorWipe(strip.Color(0, 0, 0), 25); // OFF
      BoutonCounter = 0;

  
}
    }

  }


 
/*
 * NE PAS UTILISER POUR LINSTANT
 etatBouton = digitalRead(pinBouton);

  if (etatBouton == 0 & etatSabre == 0)
  {
    etatSabre = 1;
    colorWipe(strip.Color(255, 0, 0), 25); // Red 
  }

  etatBouton = digitalRead(pinBouton);
  if (etatBouton == 0 & etatSabre == 1)
  {
    etatSabre = 0;

    colorWipe(strip.Color(0, 0, 0), 25); // Jaune
  }
  }
*/


  


void colorWipe(uint32_t c, uint8_t wait) {
  for (uint16_t i = 0; i < strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

Une solution serait de modifier la fonction

void colorWipe(uint32_t c, uint8_t wait) {
  for (uint16_t i = 0; i < strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

Tu rajoutes un argument "sens" et un test sur sa valeur pour un balayage dans l'autre sens :

void colorWipe(uint32_t c, uint8_t wait, uint8_t sens) {
  if (sens == 1) {
    for (uint16_t i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
    }
  } else {
    for (int i = strip.numPixels()-1; i >= 0 ; i--) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
    }
  }
}

A tester...

Tu devrais regarder la bibliothèque FastLed qui a des fonctions intéressantes, notamment fillgradient ou fillrainbow, plus évoluées que le simple setpixelcolor de Neopixel