WS2812 Leds

algemene C code
Berichten: 7
Geregistreerd: 17 Mrt 2015, 21:54

WS2812 Leds

Berichtdoor distroyer » 17 Mrt 2015, 22:13

Hoi allemaal,

ik zal mezelf kort voorstellen. Mijn naam is Ashwin Zondag, ben 27 jaar oud en kom uit Oss.
Mijn grootste hobby is kermis modelbouw, nu wil ik voor deze hobby ook de WS2812 leds gaan gebruiken voor bepaalde delen van een attractie genaamd Break Dance.
De leds zijn gesoldeerd, aangesloten en met de neopixel library werkt dit naar behoren.

Toch wil ik wat eigen dingen gaan proberen, maar moet je vertellen dat mijn kennis van arduino nihil is.
Om te beginnen zou ik de functie "led voor led vullen" welke standaard in de neopixel library zit, willen aanpassen dat niet led voor led aan gaat maar bijvoorbeeld per 4 leds.
Ik zit nu al een enkele dagen te stoeien met de code maar krijg dit niet voor elkaar.

Wat zou ik moeten aanpassen in de onderstaande code om dat voor elkaar te krijgen.

Code: Alles selecteren
// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {  //<strip.numPixels
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
  }
}


met vriendelijke groeten,

Ashwin Zondag

Advertisement

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: WS2812 Leds

Berichtdoor shooter » 17 Mrt 2015, 22:35

cpp code
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i<strip.numPixels()-4; i+4) { //<strip.numPixels
strip.setPixelColor(i, c);
strip,setPixelColor(i+1,c);
strip,setPixelColor(i+2,c);
strip,setPixelColor(i+3,c);
//elke vierde led kan ook dan moet de i++ i+4 worden

strip.show();
delay(wait);//voor een begin is dit wel te doen straks doen met blink without delay of een andere.
}
}

En zo zijn er nog veel meer mogelijkheden te bedenken
je woont trouwens vlakbij (oeteldonk) dus als je eens een avondje stoomcursus wilt hebben dat kan, ik kijk graag naar de kermis.
Ik heb www.miniatuurkermis.com van bouman ook al aan een arduino geholpen.
paul deelen
shooter@home.nl

Berichten: 7
Geregistreerd: 17 Mrt 2015, 21:54

Re: WS2812 Leds

Berichtdoor distroyer » 17 Mrt 2015, 23:01

Dank u voor uw snelle reactie. als u van kermis houdt, kijk eens op mijn website www.breakdancethemodel.nl/wb

Wellicht dat ik wel eens een avondje een stoom cursus kom doen. Houdt me aanbevolen.

heb de code toegevoegd aan de strantest. En idd de eerste 4 leds gaan aan. Maar hij doet nu geen for loop en vult de rest (12 leds totaal)

straks krijg ik 3 kubussen op elkaar welke in het midden van de attractie staan, deze kubussen bevatten straks 96 leds per stuk, is er een eenvoudige manier om een gehele set met leds in dezelfde kleur aan te sturen. Misschien wel gewoon in eens een hele kubus.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: WS2812 Leds

Berichtdoor nicoverduin » 18 Mrt 2015, 00:04

Ik heb best wat projecten gedaan met de WS2812B maar nooit individuele leds updaten in de neopixel lib. Ik maak gebruik van FastLED library van Paul Stoffregen. Daar heb je gewoon een Array in RAM die je alle kleuren van de regenboog zet als je wilt. En de meest ingewikkelde patronen. Doe je daarna de show() functie staan alle LEDs precies zoals gedefinieerd in RAM.

creatie van de ledstrip
cpp code
CRGB leds[NUM_LEDS]; 					/**< Array containing each LED */


FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);


vullen:
cpp code
leds[realLed] = optionColors.demoBackGroundColor;
leds[realLed].nscale8(optionColors.demoBackGroundIntensity);


updaten:
cpp code
//
// update the physical led strip if it has changed
//
if (mustUpdate) {
//
// update the led strip
//
FastLED.show();
//
// reset update flag
//
mustUpdate = false;
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: WS2812 Leds

Berichtdoor shooter » 18 Mrt 2015, 09:32

Zo Nico, je bent weer flink bezig wel mooi, maar ik denk een beetje hoog gegrepen voor ashwin.

en er staat een foutje in mijn regel de
for(uint16_t i=0; i<strip.numPixels()-4; i+4) { //<strip.numPixels
het moet i+=4 zijn
i++ betekent 1 ophogen ofwel i=i+1
i+=y is i=i+y;
je mag ook gewoon i=i+4 schrijven hoor is duidelijker.
of zelfs i=i+ophoogvariabeledieergensandersgemaaktwordt;
als je bovenaan in je programma schrijft int i; dan kun je deze overal gebruiken
de regel wordt dan beter leesbaar:
for i=0;i<strip.numPixels()-4; i+=4)
betekenis
teller begint bij 0 en stopt als i>= numpixels
en ipv normaal 1 ophogen worden er telkens 3 overgeslagen

en ja ik kom graag naar je toe hoor.

En ja de lib van paul, is prima, maar dan moet je wel eerst een ram vullen met de correcte data, en dat zie ik je vandaag nog niet doen, maar aldoende leert men.
paul deelen
shooter@home.nl

Berichten: 7
Geregistreerd: 17 Mrt 2015, 21:54

Re: WS2812 Leds

Berichtdoor distroyer » 18 Mrt 2015, 20:08

Gaaf zeg dit werkt, geweldig.

Nu ben ik weer een stapje op weg geholpen, eens kijken of ik dit straks ook toegepast krijg op de andere variaties van looplichten.
Helaas moet ik nog even wachten op onderdelen uit china, dan kan ik het in grote schaal gaan testen.

Kunt u me wellicht ook opweg helpen met een stukje code, om in eens een groep leds aan te spreken.
Ik bedoel dat je bijvoorbeeld van 20 leds in 1 korte code de helft aanspreekt om iets te doen.

Heb geen zin om zoiets als onderstaand te gaan doen, als ik straks ruim 300 leds heb.

ben inderdaad bang dat die fast led functie nog iets te ver van mijn bed show is op dit moment ;)

Code: Alles selecteren
void colorTest(uint32_t c, uint8_t wait) {
 
  for (int j=0; j<2; j++) {  //do 10 cycles of chasing
       
      strip.setPixelColor(0, 255, 0, 0);
      strip.setPixelColor(1, 255, 0, 0);
      strip.setPixelColor(2, 0, 0, 255);
      strip.setPixelColor(3, 0, 0, 255);
      strip.setPixelColor(4, 0, 0, 255);
      strip.setPixelColor(5, 0, 0, 255);
      strip.setPixelColor(6, 255, 0, 0);
      strip.setPixelColor(7, 255, 0, 0);
      strip.setPixelColor(8, 0, 0, 255);
      strip.setPixelColor(9, 0, 0, 255);
      strip.setPixelColor(10,0, 0, 255);
      strip.setPixelColor(11, 0, 0, 255);
      strip.show();
      delay(wait);
      strip.setPixelColor(0, 0, 0, 255);
      strip.setPixelColor(1, 0, 0, 255);
      strip.setPixelColor(2, 255, 0, 0);
      strip.setPixelColor(3, 255, 0, 0);
      strip.setPixelColor(4, 0, 0, 255);
      strip.setPixelColor(5, 0, 0, 255);
      strip.setPixelColor(6, 0, 0, 255);
      strip.setPixelColor(7, 0, 0, 255);
      strip.setPixelColor(8, 255, 0, 0);
      strip.setPixelColor(9, 255, 0, 0);
      strip.setPixelColor(10,0, 0, 255);
      strip.setPixelColor(11, 0, 0, 255);
      strip.show();
      delay(wait);
      strip.setPixelColor(0, 0, 0, 255);
      strip.setPixelColor(1, 0, 0, 255);
      strip.setPixelColor(2, 0, 0, 255);
      strip.setPixelColor(3, 0, 0, 255);
      strip.setPixelColor(4, 255, 0, 0);
      strip.setPixelColor(5, 255, 0, 0);
      strip.setPixelColor(6, 0, 0, 255);
      strip.setPixelColor(7, 0, 0, 255);
      strip.setPixelColor(8, 0, 0, 255);
      strip.setPixelColor(9, 0, 0, 255);
      strip.setPixelColor(10,255, 0, 0);
      strip.setPixelColor(11, 255, 0, 0);
      strip.show();
      delay(wait);
      }
    }

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: WS2812 Leds

Berichtdoor nicoverduin » 18 Mrt 2015, 21:20

Dan moet je toch weer kijken naar mijn voorbeeld :)... En dat stuurt 350RGB leds aan met daarbinnen:
a) kometen die rond vliegen
b) oplichtende panelen als een komeet bij een draadloze speakerbox komt
c) met behulp van dezelfde strip ergens midden in de strip alleen de WS2812 Chip (zonder LED) om volume regeling ed te doen
d) verschillende modes (demo en live)
e) zo ongeveer alles geparameteriseerd

En alles kan (nog net) binnen het RAM van de Arduino UNO werken.

Door de strip ahw gewoon in RAM geheugen voor te bereiden knal je daarna de hele reeks in een keer in de strip. Gemiddelde cycle tijd is ongeveer 5-8 ms update tijd. En zolang je minimaal 25-30 updates per seconde doet gaat het prima. Dan zie je geen flikker.... Je ogen kunnen dat niet bijhouden).

Op de site staan ook wat samples die prima kunnen helpen hoe het werkt. zie fastled.io
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: WS2812 Leds

Berichtdoor shooter » 18 Mrt 2015, 22:41

tja, dan wordt het tijd, dat je naar arrays en dergelijke.
functies omdat het nooit nodig is om iets te herhalen in je programma
doe eerst maar eens iets aan de delay
kijk eens hoe je een kleur kunt definieren.
en leuk dat je zo snel gaat.
ja nico heeft wel gelijk, resultaat is sneller, en mooier.
paul deelen
shooter@home.nl

Berichten: 7
Geregistreerd: 17 Mrt 2015, 21:54

Re: WS2812 Leds

Berichtdoor distroyer » 03 Apr 2015, 15:05

Dank jullie voor jullie reacties,
inmiddels zijn er 2 cubes gebouwd en ben ik al een stuk verder met het programma.

Afbeelding

https://www.youtube.com/watch?v=2H1hHyxr9jI

met vriendelijke groeten,

Ashwin

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten