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