Pagina1 van 1
Forum

Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!

Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.

Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.



Kleur LED als in Aq...
 
Deel:
Meldingen
Alles wissen

[Opgelost] Kleur LED als in Aquarium Wit/Blauw

8 Berichten
2 Gebruikers
0 Reactions
1,338 Bekeken
(@uncels)
Trusted Member
Deelgenomen: 9 jaar geleden
Berichten: 81
Topic starter  

Gezien  in een aquarium, blauw met wit LED verlichting, wat een mooie witte kleur geeft.

Is het mogelijk met een code om in een WS2812b de leds Blauw-Wit etc te laten branden ?  Blauw 1-3-5 etc  Wit 2-4-6 etc

Dit leek me mooi om icm de afstandbediening ik een mooi witblauw constant licht te hebben.

Dit heb ik al geprobeerd met wat verschillende codes, maar verder als de hele strip in dezelfde kleur kom ik niet.


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
 

Dat kan zeker, kost even wat prullen, maar uit eindelijk is het makkelijk (ik ga er vanuit dat je dit artikel door gekeken hebt).

Stel je hebt een loop (for ... next) waarin je alle kleuren instelt (NeoPixel als voorbeeld):

for(int i=0; i<NUM_LEDS; i++) {
  strip.setPixelColor(i, strip.Color(0xff, 0xff, 0xff)); // zet alles op WIT
}

We kunnen deze loop aanpassen zodat het bij even nummers, de LED op blauw zet, en bij oneven nummers op wit.

Daarbij gebruiken we een kleine handige reken truuk. 

Modulo is de deel rest van een deling. Dus een even getal gedeeld door 2 geeft altijd een modulo van nul. Het module teken is "%" in Arduino (C) berekeningen, dus 2 % 2 levert een module (of deelrest) van nul, maar 3 % 2 levert een modulo van 1, 4 % 2 levert een modulo van nul, 5 % 2 levert een module 1, etc etc.

Dus simpel gezegd:

if ( (i % 2) == 0) { 
  // doe iets voor even nummers 
} else {
  // doe iets voor oneven nummers
}

Dus de voorbeeld code zou kunnen zijn (waarbij NUM_LEDS het aantal LEDs is):

for(int i=0; i<NUM_LEDS; i++) {
  if ( (i % 2) == 0) { 
    strip.setPixelColor(i, strip.Color(0x00, 0x00, 0xff)); // zet alles op BLAUW
} else {
   strip.setPixelColor(i, strip.Color(0xff, 0xff, 0xff)); // zet alles op WIT
}

Omdat nul hetzelfde is als FALSE, zouden we een klein beetje kunnen inkorten naar het volgende.
Let wel op dat nu blauw en wit omgewisseld zijn, omdat een even nummer nul levert dus FALSE is en de IF dus faalt en doorgaat naar de ELSE.

for(int i=0; i<NUM_LEDS; i++) {
  if ( i % 2 ) { 
    strip.setPixelColor(i, strip.Color(0xff, 0xff, 0x00)); // zet alles op WIT
  } else {
    strip.setPixelColor(i, strip.Color(0x00, 0x00, 0xff)); // zet alles op BLAUW
  }
}

Niet super zinvol, maar leuk om te weten misschien.
Ik heb overigens de kleur waarden in hexadecimaal opgegeven, maar dat kan ook met decimale getallen ( 0xff = 255 ).

De variant voor FastLED is:

for(int i=0; i<NUM_LEDS; i++) {
  if ( (i % 2) == 0) { 
    leds.r:=0xff;  // WIT
    leds.g:=0xff;
    leds.b:=0xff;
  } else {
    leds.r:=0; // BLAUW
    leds.g:=0;
    leds.b:=0xff;
  }

Hopelijk helpt dit je op weg en hopelijk heb ik geen type fouten gemaakt 


   
BeantwoordenCiteren
(@uncels)
Trusted Member
Deelgenomen: 9 jaar geleden
Berichten: 81
Topic starter  

Dank je, ik heb het werkend.  Onderaan moest nog  toegevoegd worden:   

strip.show();

Ik heb de code herhaalt, maar dan andersom.  Nu heb ik blauw-wit & wit-blauw,dat wil ik rustiger,dus denk ik aan

delay(wait);   implementeren, maar dat word morgen.


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
 

Cool!

Yep strip.show(); was ik even vergeten.

Mocht je blauw, blauw, wit, wit, blauw, blauw, wit, wit etc willen dan gaat even/oneven natuurlijk niet werken.
Je kunt dan (bv) zoiets doen (dus iedere kleur verschijnt 2x):

boolean wit = true;
for(int i=0; i<NUM_LEDS; i:=i+2) {
  if (wit) {
    strip.setPixelColor(i, strip.Color(0xff, 0xff, 0xff)); // zet op WIT
    strip.setPixelColor(i+1, strip.Color(0xff, 0xff, 0xff)); // zet op WIT
  }
  else
  {
    strip.setPixelColor(i, strip.Color(0x00, 0x00, 0xff)); // zet op BLAUW
    strip.setPixelColor(i+1, strip.Color(0x00, 0x00, 0xff)); // zet op BLAUW
  } 
  wit := !wit;  // ! = Not, dus false->true en true->false
}  strip.show();


   
BeantwoordenCiteren
(@uncels)
Trusted Member
Deelgenomen: 9 jaar geleden
Berichten: 81
Topic starter  

Dank je Hans, het werkt


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
 

Awesome! 

Wil je misschien jouw uiteindelijk sketch hier plaatsen? (geheel optioneel, maar misschien leuk voor anderen) 


   
BeantwoordenCiteren
(@uncels)
Trusted Member
Deelgenomen: 9 jaar geleden
Berichten: 81
Topic starter  

Natuurlijk doe ik dat, dit is mijn sketch geworden voor 120 leds op de WS2812b met een arduino UNO.  Datapin = 6.

Het is leuk wat te spelen met deze lichteffecten & codes te combineren waardoor de uitdaging blijft en de uitkomst ooit verrassend.

De WordClock maken is nog een uitdaging  (in de Nederlandse versie) met de ws2812b Ledstrip: LINK

Onderdelen zijn niet zo duur. zie: Instructables  maar ik ben er nog niet aan begonnen.


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
 

Thanks uncels!

Ja, ik moet zeggen dat ik het prullen met de LEDs ook erg leuk vindt ... mooi dat dit projectje ook weer werkt ...
Dank je wel voor het posten van de sketch! 


   
BeantwoordenCiteren
Deel: