Doel:€250.00
Donaties:€0.00

Per saldo:€-250.00

Steun ons nu!

Laatst bijgewerkt
op 03-12-2025

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Infrabel compilatie door Remunj
Vandaag om 08:41:12
Digikeijs DR5000 Centrale, vragen en antwoorden door Remunj
Vandaag om 08:37:45
PB Models kondigt een NS Buffel aan! door Mitchell
Vandaag om 07:26:23
De bouw van mijn modelbaan in Thailand door Thai-Bundesbahn
Vandaag om 05:19:49
Nominatie cultuurprijs MSV Post B door Rsd1000
Vandaag om 02:38:52
Al mijn goede ideeën... door bask185
Vandaag om 00:32:31
Materieel verzameling van Michiel(NDS) door neudalhausenstadbahn
Vandaag om 00:07:35
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Schachbrett
17 February 2026, 23:17:28
Nieuw huis, nieuwe baan door Benelux795
17 February 2026, 23:03:24
kan ik een roco relais schakelen met een servo decoder door Dirk
17 February 2026, 23:02:46
Roco WR4üe-28 met computernummers en DB-keks door Benelux795
17 February 2026, 22:53:29
Bentheimer Eisenbahn, gisteren, vandaag en morgen. door Hans Reints
17 February 2026, 22:52:33
D-treinen naar/van Parijs in de jaren 70 door IJmc
17 February 2026, 22:25:54
Die Sauerlandbahn - Tijdperk III door defender
17 February 2026, 21:52:21
Het oude station Blaak in H0 1970 - 1993 door defender
17 February 2026, 21:41:11
Holland Scale huisjes bouwen en pimpen. door NS264
17 February 2026, 21:41:05
Nederland jaren 50 op basis van mijn roots door defender
17 February 2026, 21:37:24
Houten Plus zaterdag 21 februari 2026 door Ronald69
17 February 2026, 20:39:30
Toon hier je nieuwe (model-) spooraanwinst(en)... door Paulus
17 February 2026, 20:27:09
Momentschakelaar met "klik" door Albert de Heer
17 February 2026, 20:06:51
Vraagje over servo aansluiting door Te 2/2
17 February 2026, 19:36:48
Goppenstein (CH) ontsporing (16 februari 2026) door Te 2/2
17 February 2026, 19:34:07
Ombouw/Pimpen Bolle neuzen door bollen neus
17 February 2026, 19:21:28
Spoorwegmuseum in zwaar weer door Remunj
17 February 2026, 19:13:40
Ondervloer Fleischmann Profi door Manusjevanalles
17 February 2026, 19:13:00
Internationale trein vrijdag 13-2-2026 rond 13:50 nabij Rijssen door Valéry
17 February 2026, 18:23:36
On30 diorama: Sedona Red Rock Canyon, AZ door Hans1963
17 February 2026, 18:14:32
Gemeentetram Eemstede door R1954
17 February 2026, 18:01:26
Vijfhuis (v.h. Frotterdam) door StefanNL_Plays
17 February 2026, 17:48:00
Nederlands-materieel in Spoor-1 door daveric
17 February 2026, 17:29:24
  

Auteur Topic: lampjes in huizen willekeurig schakelen  (gelezen 15180 keer)

bask185

  • Offline Offline
  • Berichten: 5270
Re: lampjes in huizen willekeurig schakelen
« Reactie #15 Gepost op: 21 July 2025, 13:21:27 »
Bert, de backticks werken hier niet, we hebben code tags op het forum  ::)

[ c o d e ]   [ / c o d e ]

// Configuratie
const int numLeds = 3;              // Aantal LED's
const int ledPins[numLeds] = {2, 3, 4}; // Pinnen waar de LED's op aangesloten zijn

// Min en max aan-tijden in milliseconden voor elke LED
const unsigned long minTimes[numLeds] = {100, 200, 300};  // Minimale aan-tijd per LED
const unsigned long maxTimes[numLeds] = {500, 800, 1000}; // Maximale aan-tijd per LED

// Variabelen voor timing
unsigned long previousTimes[numLeds]; // Laatste keer dat elke LED veranderde
unsigned long intervals[numLeds];     // Huidige interval voor elke LED
bool ledStates[numLeds];              // Huidige staat van elke LED

void setup() {
  // Initialiseer seriële communicatie (optioneel voor debugging)
  Serial.begin(9600);
 
  // Initialiseer LED pinnen als OUTPUT
  for (int i = 0; i < numLeds; i++) {
    pinMode(ledPins, OUTPUT);
    ledStates = LOW;
    digitalWrite(ledPins, ledStates);
    previousTimes = 0;
    intervals = random(minTimes, maxTimes);
  }
}

void loop() {
  unsigned long currentTime = millis();
 
  for (int i = 0; i < numLeds; i++) {
    // Controleer of het tijd is om de LED te schakelen
    if (currentTime - previousTimes >= intervals) {
      // Schakel de LED
      ledStates = !ledStates;
      digitalWrite(ledPins, ledStates);
     
      // Update de vorige schakeltijd
      previousTimes = currentTime;
     
      // Bepaal een nieuw random interval voor de volgende schakeling
      if (ledStates == HIGH) {
        // LED gaat aan - gebruik aan-tijd interval
        intervals = random(minTimes, maxTimes);
      } else {
        // LED gaat uit - gebruik een korte uit-tijd (of pas aan-tijd aan)
        // Hier gebruiken we de helft van de minimale aan-tijd als uit-tijd
        intervals = minTimes / 2;
      }
     
      // Debug output (optioneel)
      Serial.print("LED ");
      Serial.print(i);
      Serial.print(": ");
      Serial.print(ledStates ? "AAN" : "UIT");
      Serial.print(", Volgende schakeling in: ");
      Serial.println(intervals);
    }
  }
}
Train-Science.com
Train-Science github
It ain't rocket science ;-)

bert55

  • Offline Offline
  • Berichten: 1007
Re: lampjes in huizen willekeurig schakelen
« Reactie #16 Gepost op: 21 July 2025, 15:24:49 »
Bedankt Bas,
Ken het maar was te lui ::)

edit:
Er zit een fout in de sketch:
Compilation error: incompatible types in assignment of 'int' to 'long unsigned int [3]'

In deze regels:
    previousTimes = 0;
    intervals = random(minTimes, maxTimes);

Moet even weer nazoeken waarom incompatible, mocht je het zo weten Bas, graag.

Bij toeval ben ik nu bezig met een eigen gebouwd huisje met leds erin, dus kan ik het mooi testen
« Laatst bewerkt op: 21 July 2025, 17:40:59 door Bert55 »
Met vriendelijke groet, Bert
Märklin, DCCnext, ECOS
Witmoosdorf afgebroken, Witmoos 2 wordt opgestart na de verhuizing

Patrick Smout

  • Offline Offline
  • Berichten: 456
Re: lampjes in huizen willekeurig schakelen
« Reactie #17 Gepost op: 21 July 2025, 19:33:06 »
Intervals is een array. Je moet deze indexeren wil je een waarde aan een element toekennen.

M.a..w, intervals vervangen door intervals[ i ]

Komt enkele malen voor in het programma. Ff ook nog nakijken of i de juiste index is op alle plaatsen.
« Laatst bewerkt op: 21 July 2025, 19:36:00 door Patrick Smout »
Met vriendelijk groeten,

Patrick Smout

RobVille

  • Offline Offline
  • Berichten: 302
  • My Dark Side
    • Modelbanen - Rob
Re: lampjes in huizen willekeurig schakelen
« Reactie #18 Gepost op: 21 July 2025, 19:54:00 »
Goedemorgen,

Ik ben nu op het punt om de verlichting aan te leggen.
Straatlantaarns, en verlichting voor de huisjes en het station.
Nu wil ik de verlichting in de huisjes een beetje slim maken, af en toe een lamp aan, en uit, en dat willekeurig.
Heb zo'n 30 leds voor huisjes en ongeveer 20-30 straatlantaarns (ook led)
Bestaat er een apparaat om dit slim te schakelen? Heb al de 5074 Multi protocol light decoder gevonden, heeft iemand ervaring hiermee? Is best duur om even te 'proberen'
Of zijn er alternatieven? Analoog of digitaal vind ik niet belangrijk.

Toch maar even terugkomen op de vraag van de TS. Nu de heren verder bakkeleien over het wel en wee van het programmeren van een Arduino, gebruik ik zelf de apparaatjes van Woodland. Hier kan je de Led's makkelijk mee in / uitschakelen, dimmen, ad rondom schakelen. Op beide van mijn modelbanen gebruik ik deze zonder problemen. Geen digitaal gedoe.

Rob
I need to embrace imperfection, anomalies exist everywhere .....
and
asking me if that's black or dark green is not done!

Cornfield Junction / Boulder Crossing
Bypass Junction
de "Gelderse" vallei
Palisade Canyon
  ...

bask185

  • Offline Offline
  • Berichten: 5270
Re: lampjes in huizen willekeurig schakelen
« Reactie #19 Gepost op: 21 July 2025, 20:55:16 »
Bert, je bent echt overal vergeten om  achter te tikken  :P. Dit compileert:
// Configuratie
const int numLeds = 3;              // Aantal LED's
const int ledPins[numLeds] = {2, 3, 4}; // Pinnen waar de LED's op aangesloten zijn

// Min en max aan-tijden in milliseconden voor elke LED
const unsigned long minTimes[numLeds] = {100, 200, 300};  // Minimale aan-tijd per LED
const unsigned long maxTimes[numLeds] = {500, 800, 1000}; // Maximale aan-tijd per LED

// Variabelen voor timing
unsigned long previousTimes[numLeds]; // Laatste keer dat elke LED veranderde
unsigned long intervals[numLeds];     // Huidige interval voor elke LED
bool ledStates[numLeds];              // Huidige staat van elke LED

void setup() {
  // Initialiseer seriële communicatie (optioneel voor debugging)
  Serial.begin(9600);
 
  // Initialiseer LED pinnen als OUTPUT
  for (int i = 0; i < numLeds; i++) {
    pinMode(ledPins, OUTPUT);
    ledStates[i] = LOW;
    digitalWrite(ledPins, ledStates);
    previousTimes[i] = 0;
    intervals[i] = random(minTimes, maxTimes);
  }
}

void loop() {
  unsigned long currentTime = millis();
 
  for (int i = 0; i < numLeds; i++) {
    // Controleer of het tijd is om de LED te schakelen
    if (currentTime - previousTimes[i] >= intervals[i]) {
      // Schakel de LED
      ledStates[i] = !ledStates[i];
      digitalWrite(ledPins, ledStates[i]);
     
      // Update de vorige schakeltijd
      previousTimes[i] = currentTime;
     
      // Bepaal een nieuw random interval voor de volgende schakeling
      if (ledStates[i] == HIGH) {
        // LED gaat aan - gebruik aan-tijd interval
        intervals[i] = random(minTimes[i], maxTimes[i]);
      } else {
        // LED gaat uit - gebruik een korte uit-tijd (of pas aan-tijd aan)
        // Hier gebruiken we de helft van de minimale aan-tijd als uit-tijd
        intervals[i] = minTimes[i] / 2;
      }
     
      // Debug output (optioneel)
      Serial.print("LED ");
      Serial.print(i);
      Serial.print(": ");
      Serial.print(ledStates ? "AAN" : "UIT");
      Serial.print(", Volgende schakeling in: ");
      Serial.println(intervals[i]);
    }
  }
}


Ik ben zelf echter meer dan de object georienteerde aanpak. Niet altijd, maar voor dit soort dingen vind ik het wel handig. Ik zal eerdaags iets in elkaar sleutelen.

Mvg,

Bas
Train-Science.com
Train-Science github
It ain't rocket science ;-)

bert55

  • Offline Offline
  • Berichten: 1007
Re: lampjes in huizen willekeurig schakelen
« Reactie #20 Gepost op: 21 July 2025, 21:17:39 »
Bedankt Bas en Rob.
Heb zelf overigens niets getypt, is allemaal AI.
Met vriendelijke groet, Bert
Märklin, DCCnext, ECOS
Witmoosdorf afgebroken, Witmoos 2 wordt opgestart na de verhuizing

bask185

  • Offline Offline
  • Berichten: 5270
Re: lampjes in huizen willekeurig schakelen
« Reactie #21 Gepost op: 22 July 2025, 00:15:11 »
Ik denk dat ik wat heb.

De bovenste vier regels zijn de enige die je hoeft aan te passen. Hier kan je gebruikte pinnen tussen de accolades {} zetten, en je kan 3 tijden aanpassen.
const int pin[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 } ;
const int MIN_HOUSE_TIME  =   5000 ;
const int MAX_HOUSE_TIME  =  15000 ;
const int DAY_CHANGE_TIME = 200000 ;

Elke zoveel tijd (dayTimer) klapt 'state' om. Alle pinnen gaan van af dat moment in een willekeurige volgorde om met een willekeurig (instelbare) tijd tot de volgende.


De rest van de code ziet er zo uit. Er zijn echter wat meer bestandjes bij betrokken. Dus ik moet een .zip mailen zodat je alles hebt.
Het was wel even een puzzeltje, maar het is gelukt.
#include "light.h"
#include "src/ST.h"

const int nLights = sizeof(pin) / sizeof(pin[0]) ;
Light light[nLights] ;

Timer timer ;
Timer dayTimer ;

void setup()
{
    Serial.begin(115200);

    for (int i = 0; i < nLights; i++)
    {
        light[i].begin(pin[i]);
    }

    timer.set(TIMER_BLEEP, MIN_HOUSE_TIME);
    dayTimer.set(TIMER_TOGGLE, DAY_CHANGE_TIME);

    randomSeed(analogRead(A7));
}

void loop()
{
    timer.update();
    dayTimer.update();

    if (timer.Q)
    {
        uint8_t targetState = dayTimer.Q;

        // Count how many lights are not yet in the correct state
        int mismatches = 0;
        for (int i = 0; i < nLights; i++)
        {
            if (light[i].getState() != targetState) { mismatches ++ ; }
        }

        // Only toggle if there's something left to update
        if (mismatches > 0)
        {
            bool updated = false;

            // Try random indices until one needs to change
            while (!updated)
            {
                int index = random(nLights);

                if (light[index].getState() != targetState)
                {
                    light[index].setState(targetState);

                    updated = true;
                    timer.PT = random(MIN_HOUSE_TIME, MAX_HOUSE_TIME);

                    char buf[64] ;
                    sprintf( buf, "index: %3d, Time to next: %4d, state: %d", (int)index, (int)timer.PT/*/1000*/, (int)targetState ) ;
                    Serial.println( buf ) ;
                }
            }
        }
    }
}

De hoofd aandrijfveer is hier de dayTimer en die staat dan hier op 200s (alle tijden voer je in ms). Je zou die dus ook kunnen vervangen door een schakelaar. Als je dan de schakelaar omzet, dan volgen de lampen 1 voor 1 met willekeur.

Mvg,

Bas
Train-Science.com
Train-Science github
It ain't rocket science ;-)

Ronald Schreuder

  • Offline Offline
  • Berichten: 74
Re: lampjes in huizen willekeurig schakelen
« Reactie #22 Gepost op: 22 July 2025, 08:58:35 »
Bedankt Bas, Ik moet mij er nog wel in verdiepen, maar vind het leuk dat je zo enthousiast bent en mij wilt helpen.
De rest ook allemaal bedankt voor de bijdragen.
Je kunt mij gewoon een email sturen als je dat wilt.
Gr Ronald
« Laatst bewerkt op: 22 July 2025, 09:33:48 door Ronald Schreuder »

Ronald Schreuder

  • Offline Offline
  • Berichten: 74
Re: lampjes in huizen willekeurig schakelen
« Reactie #23 Gepost op: 22 July 2025, 09:38:05 »
Toch maar even terugkomen op de vraag van de TS. Nu de heren verder bakkeleien over het wel en wee van het programmeren van een Arduino, gebruik ik zelf de apparaatjes van Woodland. Hier kan je de Led's makkelijk mee in / uitschakelen, dimmen, ad rondom schakelen. Op beide van mijn modelbanen gebruik ik deze zonder problemen. Geen digitaal gedoe.

Rob

Rob, ik heb even zitten kijken naar dat systeem, ziet er goed uit en is kant-en-klaar, maar wordt dat niet heel duur?
En er zijn 4 uitgangen, maar kun je daar per uitgang ook meerdere ledjes (eigen leds) op aansluiten, weet jij de maximale uitgang-stroom per uitgang?
Anders moet je voor elke 4 leds zo'n ding hebben, dan lopen de kosten aardig op...

AP3737

  • Offline Offline
  • Berichten: 402
Re: lampjes in huizen willekeurig schakelen
« Reactie #24 Gepost op: 22 July 2025, 09:52:03 »
Beste allen

Misschien heb ik het gemist, maar DE aanpak is toch gewoon gebruik te maken van de MoBaLedLib? Dat is een heel open source ecosystem, waarbij je kant en klare printjes kan kopen en de programmering bijvoorbeeld doet door wat vakjes in een spreadsheet in te vullen.

Ik hou van zelfbouw, maar voor de verlichting van de modelbaan zou ik altijd voor de mobaledlib kiezen. In Nederland is bijvoorbeeld Theo Maassen een actieve ontwikkelaar, en die heeft ook uitstekende printjes ontworpen.

https://wiki.mobaledlib.de/

https://wiki.mobaledlib.de/spezial/user/theo/hauptplatine_tmaa

Groet, Aiko

bert55

  • Offline Offline
  • Berichten: 1007
Re: lampjes in huizen willekeurig schakelen
« Reactie #25 Gepost op: 22 July 2025, 10:29:40 »
Beste Aiko,
Moba is een prima oplossing, net als een sketch in een Arduino proppen, die van Bas of die van mij ( na ja AI) en ook de Woodland oplossing met elk hun eigen voor en nadelen.

Ten eerste Woodland, verreweg het eenvoudigste te implementeren maar ongetwijfeld ook veruit het duurste, dat alleen houd me al tegen.

Dan Moba, de inleertijd is erg lang lijkt me, zeker voor de spoor liefhebbers zonder al te veel affiniteit met electronica. Daarbij is de Duitse taal ook een drempel, niet voor mij overigens.
Verder zie ik wat betreft open source een nadeel, vaak kan het alles maar wordt daardoor wat onoverzichtelijk. Ik wil hierbij niet generaliseren.

Zelf een sketch in een Arduino laden stelt niet veel voor, daarbij kost een Nano rond de €3 plus nog iets om hem in te steken, en kun je er veel leds onafhankelijk mee aansturen.
Kan me wel voorstellen dat niet iedereen hier zin in heeft / het een te hoge drempel vindt.

Voor mij is het een deel van de hobby om zelf printen te ontwerpen maar alle keuzes hierboven zijn prima, wellicht is er nog meer, ieder zijn ding.

Met vriendelijke groet, Bert
Märklin, DCCnext, ECOS
Witmoosdorf afgebroken, Witmoos 2 wordt opgestart na de verhuizing

bask185

  • Offline Offline
  • Berichten: 5270
Re: lampjes in huizen willekeurig schakelen
« Reactie #26 Gepost op: 22 July 2025, 10:59:01 »
Je laat code wel maken door AI, maar Duits vertalen?  :P. Daar is AI wel goed in  (y).

Die moba dingen, is dat nu alles zelf in elkaar solderen?  :-X.

Dat doet me terug denken aan een van mn eerste projecten...
https://forum.beneluxspoor.net/index.php?topic=97216.0

Ik heb er ooit een SMD versie van ontworpen maar die heeft nog geen daglicht gezien.

Bas
Train-Science.com
Train-Science github
It ain't rocket science ;-)

bert55

  • Offline Offline
  • Berichten: 1007
Re: lampjes in huizen willekeurig schakelen
« Reactie #27 Gepost op: 22 July 2025, 11:22:39 »
Weet niet hoe serieus ik jouw reactie moet zien Bas.

Duits hoef ik niet te vertalen, spreek en schrijf het als 2e taal.

En dit was mijn eerste AI sketch. Om te laten zien dat het vrij simpel kan zijn.
Veel omvangrijkere sketches heb ik zelf geschreven. Onder andere voor mijn rijdende auto’s
Met vriendelijke groet, Bert
Märklin, DCCnext, ECOS
Witmoosdorf afgebroken, Witmoos 2 wordt opgestart na de verhuizing

bask185

  • Offline Offline
  • Berichten: 5270
Re: lampjes in huizen willekeurig schakelen
« Reactie #28 Gepost op: 22 July 2025, 12:08:36 »
Mijn reacties moet je sws niet serieus nemen  ::)
Train-Science.com
Train-Science github
It ain't rocket science ;-)

Mar-Cas

  • Offline Offline
  • Berichten: 296
  • Samen bouwen a.d. woonkamerbaan is wel zo gezellig
Re: lampjes in huizen willekeurig schakelen
« Reactie #29 Gepost op: 22 July 2025, 12:10:15 »
Alternatieve versie voor UNO, NANO, MEGA en ESP's,  Program: MIXLY

Voorbeeld met timers,
Simple timer 1 heeft 1sec on/off ritme.
Simple timer 16 stuurt timers aan tbv verschillende ritmes van timers al dan niet random.




« Laatst bewerkt op: 22 July 2025, 12:13:11 door Mar-Cas »
Greetz Caspar