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

Mooi weer om buiten te spelen door hervé
Vandaag om 00:31:59
Mijn eerste H0-modeltreinbaan in aanbouw door Ronald69
Vandaag om 00:30:56
Wie heeft er ervaring met een baan in een inpandige garage in een app. gebouw? door R1954
26 July 2025, 23:52:32
LED / Lampjes (Viessmann) seinpalen aansturen. Vraagje aan electronica experts door bask185
26 July 2025, 23:45:17
Welke kleur is Roco oud bruin? door MadhouseNL
26 July 2025, 23:37:42
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Schachbrett
26 July 2025, 23:18:40
reserve onderdeel gezocht voor Minitrix 12593 BR132 door joespoor
26 July 2025, 22:54:27
Toon hier je nieuwe (model-) spooraanwinst(en)... door Karben
26 July 2025, 22:44:59
"Litter Bin" voor Brits spoor en Britse modelspoorprojecten door Hans van de Burgt
26 July 2025, 21:56:59
BR-18.6 Schaal-0. door Benelux795
26 July 2025, 21:42:38
Ronald doet de Fork Challenge! door Ronald Halma
26 July 2025, 20:52:05
RhB 1:87, terug naar 25 jaar geleden door Sylvester
26 July 2025, 20:24:27
Modules van Kees Gorter (vervolg) door ca.gorter
26 July 2025, 20:00:50
De bouw van mijn modelbaan in Thailand door guus43
26 July 2025, 19:18:35
lampjes in huizen willekeurig schakelen door Bert55
26 July 2025, 19:04:24
Raadplaatje door Klaas Zondervan
26 July 2025, 18:48:57
0n30 diorama: Sedona Verde River Canyon door Ronald Halma
26 July 2025, 17:44:09
Rheinburg, TP V/VI door rail4marcel
26 July 2025, 17:42:27
Lokpilot 4 defect door bellejt
26 July 2025, 17:40:40
Seuthe gaat stoppen door Eric B
26 July 2025, 17:04:15
BMB 00-Modulebaan, BMB-Rijdagen en BMB-Deelname aan Beurzen & Evenementen door Hans van de Burgt
26 July 2025, 17:02:03
Da's Daz 2 door BartvD
26 July 2025, 16:55:33
Bentheimer Eisenbahn, gisteren, vandaag en morgen. door Hans Reints
26 July 2025, 16:45:15
Aachenau West door Arjan6511
26 July 2025, 16:41:30
Roco 63432 loksound 2 vraag door bellejt
26 July 2025, 14:12:27
Mijn geweatherde modellen door hervé
26 July 2025, 13:48:44
Nederland jaren 50 op basis van mijn roots door defender
26 July 2025, 13:29:17
schok bij vertrek door Bahn-AG
26 July 2025, 12:13:30
Bauarbeiten im gange door 741230
26 July 2025, 12:08:04
Toon hier je (model)TRAM foto's. door R1954
26 July 2025, 12:02:09
  

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

Ronald Schreuder

  • Offline Offline
  • Berichten: 59
Re: lampjes in huizen willekeurig schakelen
« Reactie #60 Gepost op: 26 July 2025, 11:12:49 »
Goedemorgen Bert,

Ben vanmorgen met je eerste sketch bezig geweest, voor de lantaarns.
Leuk, leuk, nog leuker!
Het werkt goed, heb 4 lantaarns in serie aangesloten op 12 V, en dat gaat goed! Beetje knipperen, beetje faden en dan vol aan, perfect!
Ik kan geen video uploaden, maar ben heel tevreden.
Alleen de herhaling mag eruit, als ik opstart kan hij gewoon aanblijven totdat de 'enablepin' wordt uitgezet. Dat doe ik dan met een on/off contact op een schakeldecoder.
Ik vindt dit zo leuk, wist niet dat dit allemaal mogelijk was, en met heel weinig middelen. nu nog dieper induiken op het zelf programmeren, want ik heb nog veel meer ideeën! (ophaalbrug met brugseinen en stappenmotor) Dat gaat allemaal goed komen.
Ik moet zo werken, late dienst, maar ga morgen of overmorgen verder met de tweede sketch, om het totaal te testen, maar ben nu al heel erg tevreden.
Bedankt (Bas ook) dat jullie mij hiermee zo goed helpen.


« Laatst bewerkt op: 26 July 2025, 11:17:53 door Ronald Schreuder »

Bert55

  • Offline Offline
  • Berichten: 906
Re: lampjes in huizen willekeurig schakelen
« Reactie #61 Gepost op: 26 July 2025, 12:40:29 »
Graag gedaan, leuk dat het inspireert.
De herhaling haal ik er vanavond of morgen voor je uit.
Met vriendelijke groet, Bert
Märklin, DCCnext, ECOS
Witmoosdorf afgebroken, Witmoos 2 wordt opgestart na de verhuizing

Bert55

  • Offline Offline
  • Berichten: 906
Re: lampjes in huizen willekeurig schakelen
« Reactie #62 Gepost op: 26 July 2025, 19:04:24 »
Hierbij de aangepaste sketch.

Nog even over nagedacht, om de loop er helemaal uit te laten lijkt me voor testdoeleinden niet handig maar je kunt best van mening verschillen.
Ik heb een flag toegevoegd die je zelf op 0 (geen loop) of 1 (wel loop) kunt zetten.
Zie regel 18:
const int enableLoop = 1;  // enables the restart, set to 1 to enable loop, 0 to disable loop.


// next lines for randomLeds
// Configuratie
const int numLeds = 5;                           // Aantal LED's
const int ledPins[numLeds] = { 3, 4, 5, 6, 7 };  // Pinnen waar de LED's op aangesloten zijn, pins 2 & 9 reserved for LedFlash
// Min en max aan-tijden in milliseconden voor elke LED
const unsigned long minTimes[numLeds] = { 10000, 20000, 30000, 40000, 50000 };   // Minimale aan-tijd per LED
const unsigned long maxTimes[numLeds] = { 20000, 40000, 60000, 80000, 100000 };  // 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

// next lines for ledFlash
// Flikkeren -> Halve helderheid -> Fade-up -> Pauze -> Herstart (depending on enable loop)
const int pwmPin = 9;      // PWM output pin voor Led
const int enablePin = 2;   // Enable pin met pull-up, start de sequentie bij schakelen naar 0
const int enableLoop = 1;  // enables the restart, set to 1 to enable loop, 0 to disable loop

//  parameters
const int minBrightness = 10;          // minimale helderheid
const int maxBrightness = 255;         // maximale helderheid
const int warmupDuration = 5000;       // flikkertijd
const int fullBrightnessPause = 3000;  // Na flikkeren en fade up start de sequentie na de ingesteld tijd opnieuw
int fadeDuration = 5000;               // na flikkeren start de Led op 50% helderheid en gaat in de ingeschakelde tijd naar max

// Status variabelen
enum LightState { OFF,
                  FLICKER,
                  HALF,
                  FADE_UP,
                  PAUSE };
LightState currentState = OFF;
unsigned long stateStartTime;
int currentBrightness = 0;
bool isEnabled = false;

void setup() {
  Serial.begin(9600);
  // next lines for randomLeds
  // Stel alle LED-pinnen in als OUTPUT
  // Initialiseer LED pinnen als OUTPUT
  for (int i = 0; i < numLeds; i++) {
    pinMode(ledPins[i], OUTPUT);
    ledStates[i] = LOW;
    // digitalWrite(ledPins[i], ledStates);
    digitalWrite(ledPins[i], LOW);
    previousTimes[i] = 0;
    intervals[i] = random(minTimes, maxTimes);
  }
  // next lines for ledFlash
  pinMode(pwmPin, OUTPUT);
  pinMode(enablePin, INPUT_PULLUP);
  analogWrite(pwmPin, 0);
}

void loop() {

  randomLeds();  // switch random leds on and off, put // in front of line to switch off
  ledFlash();    // switch led on  with flikkering effect, put // in front of line to switch off
}
void randomLeds() {
  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
      digitalWrite(ledPins[i], ledStates[i]);  // write current Ledstate
      ledStates[i] = !ledStates[i];            // change Ledstate


      // 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;
        intervals[i] = minTimes[i];
      }

      // Debug output (optioneel)
      Serial.print("ledPins ");
      Serial.print(ledPins[i]);
      Serial.print("LED ");
      Serial.print(i);
      Serial.print(": ");
      Serial.print(ledStates ? "AAN" : "UIT");
      Serial.print(", Volgende schakeling in: ");
      Serial.println(intervals[i]);
    }
  }
}
void ledFlash() {
  unsigned long currentTime = millis();
  unsigned long stateTime = currentTime - stateStartTime;

  // Schakelaar logica
  if (!digitalRead(enablePin) && !isEnabled) {
    isEnabled = true;
    currentState = FLICKER;
    stateStartTime = currentTime;
  } else if (digitalRead(enablePin) && isEnabled) {
    isEnabled = false;
    currentState = OFF;
    analogWrite(pwmPin, 0);
  }

  if (!isEnabled) return;

  // State machine voor laslicht gedrag
  switch (currentState) {
    case FLICKER:
      if (stateTime < warmupDuration) {
        // *** fase
        // currentBrightness = random(minBrightness, maxBrightness * 0.7); // origineel
        currentBrightness = random(minBrightness, maxBrightness);
        analogWrite(pwmPin, currentBrightness);
        delay(50);
      } else {
        currentState = HALF;
        stateStartTime = currentTime;
        currentBrightness = maxBrightness / 2;
        analogWrite(pwmPin, currentBrightness);
      }
      break;

    case HALF:
      if (stateTime >= 1000) {
        currentState = FADE_UP;
        stateStartTime = currentTime;
      }
      break;

    case FADE_UP:
      {
        float progress = min(1.0, (float)stateTime / fadeDuration);
        currentBrightness = maxBrightness / 2 + (maxBrightness / 2) * progress;
        analogWrite(pwmPin, currentBrightness);

        if (progress >= 1.0) {
          currentState = PAUSE;
          stateStartTime = currentTime;
        }
        break;
      }

    case PAUSE:
      if (stateTime >= fullBrightnessPause & enableLoop == 1) {
        // Herstart de hele sequentie
        currentState = FLICKER;
        stateStartTime = currentTime;
      }
      break;
  }
}

Uiteraard kun je ook de loop in zijn geheeld inactief maken of verwijderen.
Dat zijn deze regels:
case PAUSE:
    //   if (stateTime >= fullBrightnessPause & enableLoop == 1) {
    //     // Herstart de hele sequentie
    //     currentState = FLICKER;
    //     stateStartTime = currentTime;
    //   }
    //   break;

Er was nog iets wat mij niet zinde. Bij opstarten gaan alle random leds meteen aan, ik heb zelf liever dat de uitgangspositie allemaal uit is.

Dit heb ik gedaan door de volgende regels met elkaar te wisselen. Naar wens kun je dat terug draaien:
      digitalWrite(ledPins, ledStates);  // write current Ledstate
      ledStates = !ledStates;            // change Ledstate
Met vriendelijke groet, Bert
Märklin, DCCnext, ECOS
Witmoosdorf afgebroken, Witmoos 2 wordt opgestart na de verhuizing