Doel:€250.00
Donaties:€88.00

Per saldo:€-162.00

Steun ons nu!

Laatst bijgewerkt
op 03-06-2025

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Tandwiel 13 tands tbv aandrijfasje door jjg koopmans
Vandaag om 00:03:09
Onlangs gespot - gefotografeerd, de foto's door GerardvV
09 September 2025, 23:37:16
Module vliegveld Jan van Mourik door MOVisser
09 September 2025, 23:01:18
Toon hier je nieuwe (model-) spooraanwinst(en)... door Besselspoor
09 September 2025, 22:57:57
roco maus 2 door Ronald Halma
09 September 2025, 22:34:53
De IJmuider spoorlijn - korte geschiedenis en plaatjes door Huup
09 September 2025, 21:34:40
Da's Daz 2 door Huup
09 September 2025, 21:17:18
BR-18.6 Schaal-0. door FritsT
09 September 2025, 21:02:36
Liliput Onderdeel NS 7851 stoomlok door Bas, Dordrecht
09 September 2025, 20:58:25
Welke winkel voert deze merken? door haes
09 September 2025, 20:10:44
44 Roco vs 44 Brawa door wob
09 September 2025, 19:56:04
Rookgenerator wil niet werken, van piko 50652 = BR 93 in Rocrail door jack is back
09 September 2025, 19:46:41
The R & J Colliery Ltd. 1:76 Brits. door Ronald69
09 September 2025, 19:41:12
Veevervoer ss/ ns door Huup
09 September 2025, 19:36:17
Mijn eerste H0-modeltreinbaan in aanbouw door Vroeger
09 September 2025, 19:14:07
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door william_2
09 September 2025, 18:35:47
Koppelingsmechanisme klemt? door Robert vh Prutsert
09 September 2025, 18:06:07
Lenz 66 001 (artnr 30200) zit vast door Silvolde
09 September 2025, 18:04:53
Ombouw/Pimpen Bolle neuzen door bollen neus
09 September 2025, 17:43:08
Centraal Zwitserland: Trein, tram, kabelbaan en gondels. door MOVisser
09 September 2025, 17:01:40
Mijnbouw Indonesië door MOVisser
09 September 2025, 16:52:55
roco br24 door H0_trainiac
09 September 2025, 16:14:18
Raadplaatje door grossraumwagen
09 September 2025, 15:47:09
Toon hier je pas gereed gekomen (model-)spoorbouwsels ... door TonM
09 September 2025, 15:22:02
De bouw van mijn modelbaan in Thailand door cor_b
09 September 2025, 14:52:31
Digitale kraan Roco 46801 door Herb73
09 September 2025, 11:30:48
Sfeer op je modelbaan door Hans Reints
09 September 2025, 10:25:45
Au bord de la Cèze door Wim Vink
09 September 2025, 10:10:40
Baanbouw Rehausen2 door Wim Vink
09 September 2025, 08:50:08
Ovaalramer in messing. Schaal 0 door FritsT
09 September 2025, 07:40:28
  

Auteur Topic: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.  (gelezen 7907 keer)

Ajean

  • Offline Offline
  • Berichten: 89
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #15 Gepost op: 28 February 2015, 17:14:51 »
@ Timo,

Heb PB gestuurd
< = >

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #16 Gepost op: 02 March 2015, 12:52:50 »
Okay, ik ben er even naar gekeken. Ik moet wel zeggen, ik heb geen ervaring met de FastLED librarie en ik heb helaas ook geen Neopixels ofzo liggen. Mijn code is puur gemaakt op basis van de documentatie en compilled zonder error. Maarja, er zou nog een foutje in kunnen zitten...

Goed, omdat er misschien meer mensen wat te zeggen hebben over de code en de aanpassingen begin ik met de originele code van Adri.

Orginele code:

#include "FastLED.h"


// How many leds in your strip?
#define NUM_LEDS 8
// For led chips like Neopixels, which have a data line, ground, and power, you just
// need to define DATA_PIN.  For led chipsets that are SPI based (four wires - data, clock,
// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN
#define DATA_PIN 6
#define BRIGHTNESS 30
// Define the array of leds
CRGB leds[NUM_LEDS];

void setup() {
    FastLED.addLeds<NEOPIXEL, DATA_PIN, RGB>(leds, NUM_LEDS);
    FastLED.setBrightness( BRIGHTNESS );
    }

void loop(){
   // Turn the LED off, then pause
   leds[0].setRGB(0,0,0);
   leds[1].setRGB(0,0,0);
   leds[2].setRGB(0,0,0);
   leds[3].setRGB(0,0,0);
   leds[4].setRGB(0,0,0);
   leds[5].setRGB(0,0,0);
   leds[6].setRGB(0,0,0);
   leds[7].setRGB(0,0,0);
   FastLED.show();
   delay(2000);
  // Turn the LED on, then pause
   leds[0].setRGB(60,0,20);
   leds[1].setRGB(60,0,20);
   leds[2].setRGB(60,0,20);
   leds[3].setRGB(60,0,20);
   leds[4].setRGB(60,0,20);
   leds[5].setRGB(60,0,20);
   leds[6].setRGB(60,0,20);
   leds[7].setRGB(60,0,20);
   FastLED.show();
   delay(5000);
  // Turn the LED on, then pause
   leds[0].setRGB(120,0,40);
   leds[1].setRGB(120,0,40);
   leds[2].setRGB(120,0,40);
   leds[3].setRGB(120,0,40);
   leds[4].setRGB(120,0,40);
   leds[5].setRGB(120,0,40);
   leds[6].setRGB(120,0,40);
   leds[7].setRGB(120,0,40);
   FastLED.show();
   delay(5000);
  // Turn the LED on, then pause
   leds[0].setRGB(180,0,60);
   leds[1].setRGB(180,0,60);
   leds[2].setRGB(180,0,60);
   leds[3].setRGB(180,0,60);
   leds[4].setRGB(180,0,60);
   leds[5].setRGB(180,0,60);
   leds[6].setRGB(180,0,60);
   leds[7].setRGB(180,0,60);
   FastLED.show();
   delay(5000);
  // Turn the LED on, then pause
   leds[0].setRGB(240,0,80);
   leds[1].setRGB(240,0,80);
   leds[2].setRGB(240,0,80);
   leds[3].setRGB(240,0,80);
   leds[4].setRGB(240,0,80);
   leds[5].setRGB(240,0,80);
   leds[6].setRGB(240,0,80);
   leds[7].setRGB(240,0,80);
   FastLED.show();
   delay(5000);
   }

Eerste paar opmerkingen over de code. Probeer altijd de delay() functie te vermijden. Deze legt het hele programma namelijk stil. Zie Blink Without Delay. Ook als je heel vaak hetzelfde doet moet je je gaan afvragen of het makkelijker kan. Vandaar dat ik een for loop gebruik om de ledstrip in te stellen.

Ook staat er een foutje in, hij vind RGB in FastLED.addLeds<NEOPIXEL, DATA_PIN, RGB>(leds, NUM_LEDS); niet leuk bij Neopixels  ;D

Ik ben in mijn aangepaste code uitgegaan van een vaste volgorde van kleuren met elk een overgangstijd (fadIn time, transition time) en duur welk vast staan bij compillen. Meer kleuren (en tijden) zijn toe te voegen. Ik heb nu even gekozen voor vol aan (alles 255) en de laatste kleur die jij gebruikte (CRGB(240, 0, 80)) waarbij ik niet weet wat dit oplevert.

In mij voorbeeld ga ik uit van de hele strip in dezelfde kleur. Dit maakt een Neopixel natuurlijk nogal nutteloos. Maar ik denk dat de opzet wel te gebruiken is om meer dynamische (links beginnen bijvoorbeeld) overgangen te maken. Ook al denk ik dat Neopixel nog steeds overkill is als je baan lang is.

Mijn code:
#include "FastLED.h"

/********** Color and timing *************/
typedef struct{
unsigned int fadeIn;
unsigned int ontime;
CRGB color;
} preset_map;

//map of {fadeIn time = transition time (in ms), on time (in ms), CRGB color}
//You can add more colors (and times) for more transitions
//transitions happen in chronological order order starting at 0 at boot
const preset_map Presets[] = { {10000, 5000, CRGB(240, 0, 80)},
{10000, 5000, CRGB(255, 255, 255)}};

#define NUM_PRESETS sizeof(Presets)/sizeof(Presets[0])

/********** FastLED definitions **********/
// How many leds in your strip?
#define NUM_LEDS 8
// For led chips like Neopixels, which have a data line, ground, and power, you just
// need to define DATA_PIN.  For led chipsets that are SPI based (four wires - data, clock,
// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN
#define DATA_PIN 6
#define BRIGHTNESS 30
// Define the array of leds
CRGB leds[NUM_LEDS];

void setup() {
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
FastLED.setBrightness( BRIGHTNESS );
}

void loop(){
ledsUpdate();


}

void ledsUpdate(){
static bool inTransition;
static unsigned long millisLast;
static byte presetCounter;
static unsigned int interval;
static byte transitionCounter;

byte r, g, b, lastPreset;

if(millis() - millisLast > interval){
millisLast = millis();

if(inTransition){
//It's a new transition, calculate transition interval
                        //transition in 256 steps
                        //Full transition will be 256 * (fadeIn / 256) as int so there can be a significant error
if(transitionCounter == 0){
interval = Presets[presetCounter].fadeIn / 256;
transitionCounter++;
}

//What was the last preset?
lastPreset = (presetCounter == 0 ? NUM_PRESETS - 1 : presetCounter - 1);

//calculate in between color for RGB
r = lerp8by8(Presets[lastPreset].color.r, Presets[presetCounter].color.r, transitionCounter);
g = lerp8by8(Presets[lastPreset].color.g, Presets[presetCounter].color.g, transitionCounter);
b = lerp8by8(Presets[lastPreset].color.b, Presets[presetCounter].color.b, transitionCounter);

//set al the colors
for(byte i = 0; i < NUM_LEDS; i++){
leds[i].setRGB(r, g, b);
}

//if it was the last transition
if(transitionCounter == 255){
inTransition = false;
}
transitionCounter++;
}
//we are at the new preset
else{
//turn all leds to preset color
for(byte i = 0; i < NUM_LEDS; i++){
leds[i] = Presets[presetCounter].color;
}
//start waiting for next transition
interval = Presets[presetCounter].ontime;
presetCounter++;
inTransition = true;
}
FastLED.show();
}
}
/code]

Ik hoop dat je hier iets mee kan.


Timo
Verzonden vanaf mijn desktop met Firefox

Ajean

  • Offline Offline
  • Berichten: 89
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #17 Gepost op: 02 March 2015, 21:43:31 »
@ Timo,

Bedankt voor je reactie. ik heb de sketch ingelezen. Er gebeuren echter enkele dingen (o.a. opeens opflitsen van een ander kleur) die ik niet kan thuisbrengen en ook moeilijk te beschrijven zijn.
Met alle plezier stuur ik je een neopixel stripje (8 leds) op zodat je zelf het resultaat van je sketch kunt bekijken. Als je dit wat lijkt stuur me dan via een PB je adres.

Groeten,

Adri
< = >

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #18 Gepost op: 02 March 2015, 22:14:10 »
Hoi Adri,

Mm, dan zal er ongetwijveld er een, waarschijnlijk klein en lullig, foutje in zitten ja  ::) Snap je globaal wel hoe ik het programma bedoelt heb? De overgangen tussen kleuren moet je zelf dus maken in zo klein mogelijke stapjes.

Als je een stukje zou willen opsturen dan test ik het met alle plezier voor je :) Ik zal je een pb sturen!


Timo
Verzonden vanaf mijn desktop met Firefox

Milan

  • Offline Offline
  • Berichten: 37
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #19 Gepost op: 15 June 2015, 16:05:19 »
Misschien dat deze regel veranderen je probleem met kleur verspringen op lost.
Orgineel:
for(byte i = 0; i < NUM_LEDS; i++){
leds[i].setRGB(r, g, b);
}

Nieuw:
for(byte i = 0; i < NUM_LEDS; i++){
leds[i].setRGB(r, g, b);
 delay(10);
}


Ik had ook problemen met timing in PWM. Het korte wachten loste bij mij het probleem op.
« Laatst bewerkt op: 16 June 2015, 11:30:17 door Neef1988 »
Projecten:
- Weer simulatie programma (gestopt)
- Bouw paradebaan Noord-Holland - Schiphol (afgebroken)
- N-Spoor Rheinland - Pfalz https://forum.beneluxspoor.net/index.php?topic=112841.0

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #20 Gepost op: 15 June 2015, 16:13:49 »
Hoi Neef(?),

Als je code plaatst moet je dan wel even tussen de [code ] tags doen, kijk nu maar eens naar je code  ;D

Maar dan terug komen op het onderwerp. Naast dat ik geen fan ben van de delay functie (je laat de uC zijn kostbare tijd uit zijn neus eten..) is 10ms ook erg veel. Zou je er een strook van 100 ledjes aan hangen zit je al op een seconde!

Daarnaast kan dat het probleem ook niet zijn. Alles wat de set functie doet is de waarde in de buffer (geheugen van de Arduino) aanpassen. Pas met FastLED.show() wordt het signaal naar de ledstrip gepompt (in een keer allemaal). En logischerwijs zal een vertraging voor het schrijven van wat Arduino geheugen niets uitmaken.

Mag ik vragen wat jij voor timing problemen had met PWM?


Timo
Verzonden vanaf mijn desktop met Firefox

Milan

  • Offline Offline
  • Berichten: 37
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #21 Gepost op: 16 June 2015, 11:38:44 »
Beste Timo,

Misschien is 10ms ook wel wat veel. Heb alleen de ervaring dat bits nog wel eens door elkaar willen lopen bij een Arduino UNO,

Met het project waar ik zelf mee bezig ben heb ik het zelfde ondervonden en meestal zorgde de vertraging er voor dat dit probleem werd op gelost.

Als alle dat in één keer weg geschreven wordt met de FastLED.show() functie dan kan het hier inderdaad niet aan liggen.

Zou alleen toch een keertje de waarde van de variabele leds.setRGB(r, g, b) uit lezen per led.

Misschien kom je hier ongeregeld heden in die niet zouden moeten.
Projecten:
- Weer simulatie programma (gestopt)
- Bouw paradebaan Noord-Holland - Schiphol (afgebroken)
- N-Spoor Rheinland - Pfalz https://forum.beneluxspoor.net/index.php?topic=112841.0

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #22 Gepost op: 16 June 2015, 16:31:58 »
Hoi Milan,

Bitjes door elkaar lopen is per definitie niet mogelijk. Het schrijven van bitjes is iets wat de Arduino doet en pas verder gaat als het gedaan is.

Wel kan het zijn dat externe dingen (Serial, ledstrips, displays enz) wat tijd nodig hebben het te verwerken. Nu kan een hele korte delay wel eens handig zijn maar dan een paar microseconde. Gebruik van delay() is eigenlijk altijd af te raden en kan beter opgelost worden.

Wil ik het probleem eruit halen zou ik er toch even weer langer voor moeten gaan zitten. Al weer even geleden dat ik naar de library gekeken had...  ::)

Timo

PS, let met code plaatsen even op. Code met arrays botsen namelijk met de opmaak tags, zeker omdat i vaak als pointer gebruikt wordt maar [i ] italic oplevert.
Verzonden vanaf mijn desktop met Firefox