Doel:€250.00
Donaties:€128.00

Per saldo:€-122.00

Steun ons nu!

Laatst bijgewerkt
op 16-04-2024

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Decals voor een Roco 64892 DSG Speisewagen door frits959
Vandaag om 12:01:05
Openen Lima Hondekop door Dick55
Vandaag om 11:56:54
"Nederlandse" modellen door spoorijzer
Vandaag om 11:43:26
Einde Koemo ballast ??? door Frank 123
Vandaag om 11:33:48
Een stukje Odsherreds Jernbane (OHJ) door tothebeach
Vandaag om 11:11:37
Stationsplein Baden Baden door Dion
Vandaag om 10:52:24
Piko 2200 (52686)+ uhlenbrock 76420(?) door Jeroen Trainz
Vandaag om 10:49:27
Van Biervliet/B Models 2019, nieuws van de fabrikant door JeroenM.
Vandaag om 10:24:06
US diorama in H0 door Wim Vink
Vandaag om 10:18:14
Oude metalen trafo's gebruiken....... door Klaas Zondervan
Vandaag om 10:02:44
25 jaar geleden door Willem1951
Vandaag om 09:43:30
Ronald en Wanda's "Southern Comfort" swamp layout! door Frans
Vandaag om 09:27:24
Baan in Los Angeles door Jelmer
Vandaag om 08:56:38
Pfarrerwinkel bahn door Jelmer
Vandaag om 08:55:03
Aachenau West door Jelmer
Vandaag om 08:49:14
Bouw van materieel 40 treinstellen door Jelmer
Vandaag om 08:48:06
LS Models 2024 door Martijn193
Vandaag om 08:02:33
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Modellbahnwagen
Vandaag om 00:35:59
NS 8400 van Werps door Huup
18 april 2024, 23:17:50
EifelBurgenBahn door Reinout van Rees
18 april 2024, 23:17:45
Bisonkit verdunner door Deetrein
18 april 2024, 23:16:25
Traintastic - modelbaan besturingssoftware (gratis en open source) door reinderlf
18 april 2024, 23:02:30
Vergelijkings-/conversietabel modelverven door Rob Ellerman
18 april 2024, 22:37:44
Onlangs gespot - gefotografeerd, de foto's door Thom
18 april 2024, 21:24:49
Bouw NS C 8605, BC 6012 en C 6820 door prutser
18 april 2024, 21:09:01
BMB-Module: “Corfe Castle Station” door MichielB
18 april 2024, 20:24:46
Mijn eerste H0-modeltreinbaan in aanbouw door MichielB
18 april 2024, 20:05:30
20 en 21 april MobExpo door renenstimpie
18 april 2024, 18:53:42
Ervaringen met bezorgdiensten (PostNL, DHL, etc) door roco
18 april 2024, 17:54:18
Ombouw/Pimpen Bolle neuzen door bollen neus
18 april 2024, 17:48:50
  

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

Ajean

  • Offline Offline
  • Berichten: 89
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #15 Gepost op: 28 februari 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 maart 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 maart 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 maart 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: 34
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #19 Gepost op: 15 juni 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 juni 2015, 11:30:17 door Neef1988 »
Projecten:
- Renovatie NS 1219 uit 1965 (volbracht)
- Digitaliseren NS 1657 (volbracht)
- Weer simulatie programma (bijna klaar) http://forum.beneluxspoor.net/index.php/topic,65084.0.html
- Bouw paradebaan Noord-Holland - Schiphol (meer jaren plan ;) ) ht

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #20 Gepost op: 15 juni 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: 34
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #21 Gepost op: 16 juni 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:
- Renovatie NS 1219 uit 1965 (volbracht)
- Digitaliseren NS 1657 (volbracht)
- Weer simulatie programma (bijna klaar) http://forum.beneluxspoor.net/index.php/topic,65084.0.html
- Bouw paradebaan Noord-Holland - Schiphol (meer jaren plan ;) ) ht

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #22 Gepost op: 16 juni 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