Contrôler leds Neopixels (WS2812b) avec un bouton poussoir

Modérateur : Dehas

Avatar du membre
willmodelisme
Pilote toutes catégories
Messages : 2095
Enregistré le : sam. 2 juin 2012 17:20
Réputation : 0
Localisation : essonne 91

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par willmodelisme »

Je n'ai pas réussi a faire fonctionner un attiny a 8 mhz de mon coté...
Je n'ai pas d'erreur lors du téléversement mais rien ne se passe quand je branche.

J'utilise ce sketch, library fastLED, pin 0 pour l'attiny et neopixel strip x8:

Code : Tout sélectionner

#include <FastLED.h>

#define LED_PIN     0
#define NUM_LEDS    8
#define BRIGHTNESS  255
#define LED_TYPE    WS2811
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];

#define UPDATES_PER_SECOND 100

// This example shows several ways to set up and use 'palettes' of colors
// with FastLED.
//
// These compact palettes provide an easy way to re-colorize your 
// animation on the fly, quickly, easily, and with low overhead.
//
// USING palettes is MUCH simpler in practice than in theory, so first just
// run this sketch, and watch the pretty lights as you then read through 
// the code.  Although this sketch has eight (or more) different color schemes,
// the entire sketch compiles down to about 6.5K on AVR.
//
// FastLED provides a few pre-configured color palettes, and makes it
// extremely easy to make up your own color schemes with palettes.
//
// Some notes on the more abstract 'theory and practice' of 
// FastLED compact palettes are at the bottom of this file.



CRGBPalette16 currentPalette;
TBlendType    currentBlending;

extern CRGBPalette16 myRedWhiteBluePalette;
extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;


void setup() {
  delay( 3000 ); // power-up safety delay
  FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  FastLED.setBrightness(  BRIGHTNESS );
  
  currentPalette = RainbowColors_p;
  currentBlending = BLEND;
}


void loop()
{
  ChangePalettePeriodically();

  static uint8_t startIndex = 0;
  startIndex = startIndex + 1; /* motion speed */

  FillLEDsFromPaletteColors( startIndex);

  FastLED.show();
  FastLED.delay(1000 / UPDATES_PER_SECOND);
}

void FillLEDsFromPaletteColors( uint8_t colorIndex)
{
  uint8_t brightness = 255;
  
  for( int i = 0; i < NUM_LEDS; i++) {
    leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending);
    colorIndex += 3;
  }
}


// There are several different palettes of colors demonstrated here.
//
// FastLED provides several 'preset' palettes: RainbowColors_p, RainbowStripeColors_p,
// OceanColors_p, CloudColors_p, LavaColors_p, ForestColors_p, and PartyColors_p.
//
// Additionally, you can manually define your own color palettes, or you can write
// code that creates color palettes on the fly.  All are shown here.

void ChangePalettePeriodically()
{
  uint8_t secondHand = (millis() / 1000) % 60;
  static uint8_t lastSecond = 99;
  
  if( lastSecond != secondHand) {
    lastSecond = secondHand;
    if( secondHand ==  0)  { currentPalette = RainbowColors_p;         currentBlending = BLEND; }
    if( secondHand == 10)  { currentPalette = RainbowStripeColors_p;   currentBlending = NOBLEND;  }
    if( secondHand == 15)  { currentPalette = RainbowStripeColors_p;   currentBlending = BLEND; }
    if( secondHand == 20)  { SetupPurpleAndGreenPalette();             currentBlending = BLEND; }
    if( secondHand == 25)  { SetupTotallyRandomPalette();              currentBlending = BLEND; }
    if( secondHand == 30)  { SetupBlackAndWhiteStripedPalette();       currentBlending = NOBLEND; }
    if( secondHand == 35)  { SetupBlackAndWhiteStripedPalette();       currentBlending = BLEND; }
    if( secondHand == 40)  { currentPalette = CloudColors_p;           currentBlending = BLEND; }
    if( secondHand == 45)  { currentPalette = PartyColors_p;           currentBlending = BLEND; }
    if( secondHand == 50)  { currentPalette = myRedWhiteBluePalette_p; currentBlending = NOBLEND;  }
    if( secondHand == 55)  { currentPalette = myRedWhiteBluePalette_p; currentBlending = BLEND; }
  }
}

// This function fills the palette with totally random colors.
void SetupTotallyRandomPalette()
{
  for( int i = 0; i < 16; i++) {
    currentPalette[i] = CHSV( random8(), 255, random8());
  }
}

// This function sets up a palette of black and white stripes,
// using code.  Since the palette is effectively an array of
// sixteen CRGB colors, the various fill_* functions can be used
// to set them up.
void SetupBlackAndWhiteStripedPalette()
{
  // 'black out' all 16 palette entries...
  fill_solid( currentPalette, 16, CRGB::Black);
  // and set every fourth one to white.
  currentPalette[0] = CRGB::White;
  currentPalette[4] = CRGB::White;
  currentPalette[8] = CRGB::White;
  currentPalette[12] = CRGB::White;

}

// This function sets up a palette of purple and green stripes.
void SetupPurpleAndGreenPalette()
{
  CRGB purple = CHSV( HUE_PURPLE, 255, 255);
  CRGB green  = CHSV( HUE_GREEN, 255, 255);
  CRGB black  = CRGB::Black;
  
  currentPalette = CRGBPalette16( 
    green,  green,  black,  black,
    purple, purple, black,  black,
    green,  green,  black,  black,
    purple, purple, black,  black );
}


// This example shows how to set up a static color palette
// which is stored in PROGMEM (flash), which is almost always more 
// plentiful than RAM.  A static PROGMEM palette like this
// takes up 64 bytes of flash.
const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM =
{
  CRGB::Red,
  CRGB::Gray, // 'white' is too bright compared to red and blue
  CRGB::Blue,
  CRGB::Black,

  CRGB::Red,
  CRGB::Gray,
  CRGB::Blue,
  CRGB::Black,

  CRGB::Red,
  CRGB::Red,
  CRGB::Gray,
  CRGB::Gray,
  CRGB::Blue,
  CRGB::Blue,
  CRGB::Black,
  CRGB::Black
};



// Additionl notes on FastLED compact palettes:
//
// Normally, in computer graphics, the palette (or "color lookup table")
// has 256 entries, each containing a specific 24-bit RGB color.  You can then
// index into the color palette using a simple 8-bit (one byte) value.
// A 256-entry color palette takes up 768 bytes of RAM, which on Arduino
// is quite possibly "too many" bytes. 
//
// FastLED does offer traditional 256-element palettes, for setups that
// can afford the 768-byte cost in RAM.
//
// However, FastLED also offers a compact alternative.  FastLED offers
// palettes that store 16 distinct entries, but can be accessed AS IF
// they actually have 256 entries; this is accomplished by interpolating
// between the 16 explicit entries to create fifteen intermediate palette 
// entries between each pair.
//
// So for example, if you set the first two explicit entries of a compact 
// palette to Green (0,255,0) and Blue (0,0,255), and then retrieved 
// the first sixteen entries from the virtual palette (of 256), you'd get
// Green, followed by a smooth gradient from green-to-blue, and then Blue.


Image
Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Tu devrais peut être essayer la librarie adafruit !

https://github.com/adafruit/Adafruit_NeoPixel" onclick="window.open(this.href);return false;

J'ai testé sur un attiny 20 MHz, mais sans succés, j'ai la même erreur de "CPU speed" ! il faudra que j'arrive à passer ce 20 MHz en 16 MHz ou 8 MHz

Grrrrr !


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
willmodelisme
Pilote toutes catégories
Messages : 2095
Enregistré le : sam. 2 juin 2012 17:20
Réputation : 0
Localisation : essonne 91

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par willmodelisme »

J'ai trouvé cela:
http://shin-ajaran.blogspot.sg/2014/04/ ... iny85.html" onclick="window.open(this.href);return false;


Image
Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Mdr ! j'allais t'envoyer le lien
Modifié en dernier par Tomdu38 le mar. 10 mars 2015 19:44, modifié 1 fois.


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
willmodelisme
Pilote toutes catégories
Messages : 2095
Enregistré le : sam. 2 juin 2012 17:20
Réputation : 0
Localisation : essonne 91

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par willmodelisme »

MDR... :hehe:

En tout cas j'ai trouvé (je pense) d’où vient mon pb, car je ne faisais pas " burn Bootloader"...
Je vais tester.


Image
Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Yeap ! j'attends le résultat de ton test alors.

D'ailleurs tu as une adresse pour les Attiny en 8MHz ?

A+

Tom


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
willmodelisme
Pilote toutes catégories
Messages : 2095
Enregistré le : sam. 2 juin 2012 17:20
Réputation : 0
Localisation : essonne 91

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par willmodelisme »

Ça marche !!!!
Avec le code de la page du lien plus haut.
Il me manque juste le contrôle au push button mais j'ai peut être mal câblé.
En tout cas le code en tient compte.

Prochaine étape, et j'aurai besoin d'aide, remplacer le push button par le switch a impulsion de ma taranis ::d ::d
Pour faire défiler les patterns avec le switch de la radio..... :gene:


Image
Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Trop cool ! tu les as commandé ou tes Attiny en 8 MHz ???? :ghee:


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
willmodelisme
Pilote toutes catégories
Messages : 2095
Enregistré le : sam. 2 juin 2012 17:20
Réputation : 0
Localisation : essonne 91

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par willmodelisme »

Amazon ou ebay

http://www.ebay.fr/itm/10X-ATMEL-Attiny ... 1707847123" onclick="window.open(this.href);return false;?


Image
Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Ce sont des 20MHz !!! pas des 8 Mhz


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
willmodelisme
Pilote toutes catégories
Messages : 2095
Enregistré le : sam. 2 juin 2012 17:20
Réputation : 0
Localisation : essonne 91

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par willmodelisme »

Des 8 je pense.
En tous cas c'est la fréquence a laquelle j'ai programmé.


Image
Avatar du membre
willmodelisme
Pilote toutes catégories
Messages : 2095
Enregistré le : sam. 2 juin 2012 17:20
Réputation : 0
Localisation : essonne 91

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par willmodelisme »

Voilà en vidéo:



Image
Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Bon tu n'as plus qu'à nous faire un petit tuto ! Quand je compile mon code, j'ai des erreurs sur l'Attiny, même en faisant un BurnBootloader... Et je n'arrive pas à trouver d'explications claires sur ces fréquences, 8Mhz, 20Mhz ... il me semble que les leds fonctionnent au max à 16Mhz...

Bref !

En tout cas, jolie guirlande !!! ;)


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Dehas
Administrateur du site
Messages : 16171
Enregistré le : ven. 3 juin 2011 12:50
Réputation : 5
Localisation : Saint Dié des Vosges
Genre :
Contact :

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Dehas »

Beau boulot Will :super:


Avatar du membre
willmodelisme
Pilote toutes catégories
Messages : 2095
Enregistré le : sam. 2 juin 2012 17:20
Réputation : 0
Localisation : essonne 91

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par willmodelisme »

J'ai juste suivi le tuto et le code du lien de shin-ajaran:

Code : Tout sélectionner

#include <Adafruit_NeoPixel.h> 
/*
 WS2811/Neopixel pattern switcher for ATtiny85 (and Arduino)
 Requires Adafruit NeoPixel Library
 WS2811 Signal, Digital Pin 4
 Button, Digital Pin 0
 GPL v3
 */
/*
shin:random pattern selector
*/
    
    
// Define
#define NUM_LEDS 8 //60LED per strip
#define DATA_PIN 4 //output pin on ATTiny85
#define BTN_PIN 0 //input pin on ATTiny85
#define BTN_DELAY 250 //add delay for debounce
#define NUM_PATTERNS 12 //patterns avail
#define CTR_THRESH 16

// Init Vars
uint8_t j = 0;
uint8_t pattern=1;
uint8_t buttonState=0;
uint8_t lastPix=0; 
uint8_t myPix=0;
uint8_t direction=1;
uint8_t counter=0;
uint8_t colors[3];
uint32_t setColor=0;
unsigned long mark;

// Start Strip
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, DATA_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
    //pinMode(BTN_PIN, INPUT);     
    randomSeed(BTN_PIN);
    strip.begin();
    strip.show(); // Initialize all pixels to 'off'
}

void loop() {
    // if button pressed, advance, set mark
    //chkBtn(digitalRead(BTN_PIN));
   int rand = random(1,13);//1to12
    // if pattern greater than #pattern reset
    //if (pattern > NUM_PATTERNS) { pattern = 1; }
    if (rand > NUM_PATTERNS) { pattern = 1; }
    
    // choose a pattern
    //pickPattern(pattern);
    pickPattern(rand);

    // set direction
    if (direction == 1) { j++;  } else {  j--; }

    if (j > 254) { direction = 0; }
    if (j < 1) { direction = 1; }   
   
}

/* pick a pattern */
void pickPattern(uint8_t var) {
      switch (var) {
        case 1:
          // scanner, color and delay - RGB
          scanner(strip.Color(255,0,0),50);
          scanner(strip.Color(200,0,100),50);
          scanner(strip.Color(64,0,200),50);
        break;
        case 2:
          // color wipe random RGB
          colorWipe(strip.Color(random(255), random(255), random(255)),50);
        break;
        case 3:
          // color wave - Hue/Sat/Bright
          // hue low (0-359), high (0-359),rate,extra delay
          wavey(200,240,0.06,0);
        break;
        case 4:
          // rainbow firefly, 1px at random
          colorFirefly(60);
          counter++;
        break;
        case 5:
          // rainbow solid
          rainbow(10);
          counter++;
        break;
        case 6:
           // bounce in and out
           // tail len, counter, delay
           bounceInOut(4,counter,20);
           counter++;
        break;
        case 7:
           // color wipe from center
           colorWipeCenter(strip.Color(255,0,0),100);
           colorWipeCenter(strip.Color(255,64,0),100);
        break;
        case 8:
           // solid color
           colorFast(strip.Color(255,255,255),0);
        break;
        case 9:
          // fade even or odd
          // 0-359 Hue value, even/odd, delay
          fadeEveOdd(200,0,20);
          fadeEveOdd(300,1,20);
        break;
        case 10:
          // show rainbow
          rainbowCycle(10);
         break; 
		 
	case 11:
        // show rainbow
        theaterChaseRainbow(50);
         break; 
		 
      case 12:
      rainbowCycle2(20);
		 break;
      }
}

/* check button state */
boolean chkBtn(int buttonState) {
   if (buttonState == HIGH && (millis() - mark) > BTN_DELAY) {
       j = 0;
       mark = millis();
       pattern++;
       return true;
    } 
    else { return false; }
}

void colorFirefly(int wait) {
        if(myPix != lastPix) {
          if(counter<CTR_THRESH) {
            float colorV = sin((6.28/30)*(float)(counter)) *255;
            HSVtoRGB((359/CTR_THRESH)*counter, 255, colorV, colors);
            strip.setPixelColor(myPix, colors[0], colors[1], colors[2]);
           strip.show();
           delay(wait);
          } else {
            lastPix=myPix;
            counter=0;
            colorFast(0,0);
          }
        } else {
          myPix=random(0,strip.numPixels());
        }

}

// Fill the dots one after the other with a color
// Modified from Neopixel sketch to break on button press

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

// color wipe from center
void colorWipeCenter(uint32_t c, uint8_t wait) {
  uint8_t mid=strip.numPixels()/2;
  strip.setPixelColor(mid,c);
  for(uint16_t i=0; i<=strip.numPixels()/2; i++) {
      if(chkBtn(digitalRead(BTN_PIN))) { break; }
      strip.setPixelColor(mid+i, c);
      strip.setPixelColor(mid-i, c);
      strip.show();
      delay(wait);
  }
}

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

// Rainbow Cycle, modified from Neopixel sketch to break on button press
void rainbowCycle(uint8_t wait) {
    uint16_t i;

    //  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for (i = 0; i < strip.numPixels(); i++) {
        strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
    // }
}

void rainbow(uint8_t wait) {
    uint16_t i;

    //for(j=0; j<256; j++) {
    for (i = 0; i < strip.numPixels(); i++) {
        strip.setPixelColor(i, Wheel((i + j) & 255));
    }
    strip.show();
    delay(wait);
    // }
}

// scanner

void scanner(uint32_t c,uint8_t wait) {
        for(int i=0; i< strip.numPixels(); i++) {
            if(chkBtn(digitalRead(BTN_PIN))) { break; }

            colorFast(0,0);
            strip.setPixelColor(i,c);
            strip.show();
            delay(wait);
        }
        for(int i=strip.numPixels(); i>0; i--) {
           if(chkBtn(digitalRead(BTN_PIN))) { break; }
            colorFast(0,0);
            strip.setPixelColor(i,c);
            strip.show();
            delay(wait);
        }    
}

// scanner to midpoint
void bounceInOut(uint8_t num, uint8_t start,uint8_t wait) {
  colorFast(0,0);
  uint8_t color=200;
  for(int q=0; q < num; q++) {
    if(strip.numPixels()-start >= 0 && start < NUM_LEDS) {
          strip.setPixelColor(start+q, strip.Color(0,color,0));
          strip.setPixelColor(strip.numPixels()-start-q, strip.Color(0,color,0));
      }   
    color=round(color/2.0);
    strip.show();
    delay(wait);
  }
  if(counter > strip.numPixels()) { counter=0; }
}

void fadeEveOdd(int c1,byte rem,uint8_t wait) {
              for(int j=0; j < CTR_THRESH; j++) {
                      for(int i=0; i< strip.numPixels(); i++) {
                        if(i % 2== rem) {
                           HSVtoRGB(c1,255,(255/CTR_THRESH)*j,colors);
                           strip.setPixelColor(i,colors[0],colors[1],colors[2]);
                         }
                      }           
                      if(chkBtn(digitalRead(BTN_PIN))) { break; }
                      strip.show();
                      delay(wait);
                }
                for(int j=CTR_THRESH; j >= 0; j--) {
                      for(int i=0; i< strip.numPixels(); i++) {
                        if(i % 2== rem) {
                           HSVtoRGB(c1,255,(255/CTR_THRESH)*j,colors);
                           strip.setPixelColor(i,colors[0],colors[1],colors[2]);
                         }
                      }             
                     if(chkBtn(digitalRead(BTN_PIN))) { break; }
                      strip.show();
                      delay(wait);
                } 
}

// twinkle random number of pixels
void twinkleRand(int num,uint32_t c,uint32_t bg,int wait) {
	// set background
	 colorFast(bg,0);
	 // for each num
	 for (int i=0; i<num; i++) {
	   strip.setPixelColor(random(strip.numPixels()),c);
	 }
	strip.show();
	delay(wait);
}

// sine wave, low (0-359),high (0-359), rate of change, wait
void wavey(int low,int high,float rt,uint8_t wait) {
  float in,out;
  int diff=high-low;
  int step = diff/strip.numPixels();
  for (in = 0; in < 6.283; in = in + rt) {
       for(int i=0; i< strip.numPixels(); i++) {
           out=sin(in+i*(6.283/strip.numPixels())) * diff + low;
           HSVtoRGB(out,255,255,colors);
           strip.setPixelColor(i,colors[0],colors[1],colors[2]);
       }
           strip.show();
           delay(wait);
           if(chkBtn(digitalRead(BTN_PIN))) { break; }
  }
}

// sine wave, intensity
void waveIntensity(float rt,uint8_t wait) {
  float in,level;
  for (in = 0; in < 6.283; in = in + rt) {
       for(int i=0; i< strip.numPixels(); i++) {
         // sine wave, 3 offset waves make a rainbow!
        level = sin(i+in) * 127 + 128;
        // set color level 
        strip.setPixelColor(i,(int)level,0,0);
       }
           strip.show();
           delay(wait);
           if(chkBtn(digitalRead(BTN_PIN))) { break; }
  }
}

// helpers 

uint32_t Wheel(byte WheelPos) {
    if (WheelPos < 85) {
        return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
    } else if (WheelPos < 170) {
        WheelPos -= 85;
        return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
    } else {
        WheelPos -= 170;
        return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
    }
}


// HSV to RGB colors
// hue: 0-359, sat: 0-255, val (lightness): 0-255
// adapted from http://funkboxing.com/wordpress/?p=1366
void HSVtoRGB(int hue, int sat, int val, uint8_t * colors) {
    int r, g, b, base;
    if (sat == 0) { // Achromatic color (gray).
        colors[0] = val;
        colors[1] = val;
        colors[2] = val;
    } else {
        base = ((255 - sat) * val) >> 8;
        switch (hue / 60) {
        case 0:
            colors[0] = val;
            colors[1] = (((val - base) * hue) / 60) + base;
            colors[2] = base;
            break;
        case 1:
            colors[0] = (((val - base) * (60 - (hue % 60))) / 60) + base;
            colors[1] = val;
            colors[2] = base;
            break;
        case 2:
            colors[0] = base;
            colors[1] = val;
            colors[2] = (((val - base) * (hue % 60)) / 60) + base;
            break;
        case 3:
            colors[0] = base;
            colors[1] = (((val - base) * (60 - (hue % 60))) / 60) + base;
            colors[2] = val;
            break;
        case 4:
            colors[0] = (((val - base) * (hue % 60)) / 60) + base;
            colors[1] = base;
            colors[2] = val;
            break;
        case 5:
            colors[0] = val;
            colors[1] = base;
            colors[2] = (((val - base) * (60 - (hue % 60))) / 60) + base;
            break;
        }

    }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
        }
        strip.show();
       
        delay(wait);
       
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, 0);        //turn every third pixel off
        }
    }
  }
}
// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle2(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}


Image
Avatar du membre
Dehas
Administrateur du site
Messages : 16171
Enregistré le : ven. 3 juin 2011 12:50
Réputation : 5
Localisation : Saint Dié des Vosges
Genre :
Contact :

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Dehas »

Tu as un schéma du montage ??
Merci


Avatar du membre
willmodelisme
Pilote toutes catégories
Messages : 2095
Enregistré le : sam. 2 juin 2012 17:20
Réputation : 0
Localisation : essonne 91

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par willmodelisme »

Image

Je n'ai pas câblé le bouton poussoir en pin 0 car ça ne marche pas.
Les différentes séquences de flash défilent automatiquement.


Image
Avatar du membre
Dehas
Administrateur du site
Messages : 16171
Enregistré le : ven. 3 juin 2011 12:50
Réputation : 5
Localisation : Saint Dié des Vosges
Genre :
Contact :

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Dehas »

Je vais regarder pour les commander avec la radio en attendant de recevoir le matos.


Avatar du membre
willmodelisme
Pilote toutes catégories
Messages : 2095
Enregistré le : sam. 2 juin 2012 17:20
Réputation : 0
Localisation : essonne 91

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par willmodelisme »

Oui, ou bien déjà voir comment faire que le bouton poussoir soit opérationnel.
Il est codé, mais ça ne donne rien, testé sur UNO.


Image
Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Cool ! juste pour être sûr, le lien que tu m'as donner sur les Attiny85 est celui où tu as commandé les tiens ???

Je reste bloqué avec des 20Mhz, ... je capte rien lol ::d du coup je vais me commander des 8Mhz si je trouve la bonne adresse.

Pour le bouton poussoir, tu as essayé de mixer le code que tu as fait avec celui que j'ai posté en première page de ce poste ???

Il faut mettre le bouton poussoir sur un analog pin en input, faire le même câblage avec la résistance (cf page 1)

Ensuite il faut mixer les "case..." pour avoir les séquences aléatoires.

D’ailleurs, c'est un système qui est similaire à celui monté sur le Vortex... Une carte à l'arrière avec 6 leds en rectangle de 3x2 avec un bouton poussoir qui sélectionne
des séquences de fonctionnement pour les leds.
Capturer.JPG
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Ouiiiiiiiiiiiiii !!! j'ai réussi, ça marche !!! ::d Enfin !

Et mon bouton poussoir aussi !! :langue2: lol

Vidéo :

https://vimeo.com/122149805


PS : le lien vidéo ne fonctionne pas ...


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Une petite vidéo de l'intégration de l'Attiny et du bouton poussoir sur les néopixel :



Bonne journée.


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Dehas
Administrateur du site
Messages : 16171
Enregistré le : ven. 3 juin 2011 12:50
Réputation : 5
Localisation : Saint Dié des Vosges
Genre :
Contact :

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Dehas »

Ben si ça fonctionne, il faut mettre le bon tag !!


Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

:gene2: Bah chez moi ça fait une fenêtre blanche !! faut peut être que je fasse des mises à jour ! ..


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Dehas
Administrateur du site
Messages : 16171
Enregistré le : ven. 3 juin 2011 12:50
Réputation : 5
Localisation : Saint Dié des Vosges
Genre :
Contact :

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Dehas »

Pas de soucis, je corrigerais si ça passe pas.


Répondre

Retourner vers « Codes et Programmations »