, kan ik de output voor de straatlantaarns een paar keer laten knipperen om hem dan constant te laten branden?
kan ik de output voor de straatlantaarns een paar keer laten knipperen om hem dan constant te laten branden?
Waarom wil je dat? Het is een misverstand dat straatlantaarns met TL knipperen bij het inschakelen. Die armaturen zijn starterloos, er zitten zelfstartende buizen in en die knipperen niet.
Je hebt vast gelijk Klaas maar voor het leuk is ook een reden Ronald. Aansturen kan ook via DCC. Relais zijn wat old school. Zelf gebruik is een (eigen) at mega ic op een print met connectoren en een DCC ingang. Namaken is een eitje..
Omdat ik dat leuk vind.Niet knipperen vind ik saai.
Ja het wordt waarschijnlijk aansturen via een DCC decoder.
// Flikkeren -> Halve helderheid -> Fade-up -> Pauze -> Herstartconst int pwmPin = 9; // PWM output pin voor Ledconst int enablePin = 2; // Enable pin met pull-up, start de sequentie bij schakelen naar 0// parametersconst int minBrightness = 60; // minimale helderheidconst int maxBrightness = 255; // maximale helderheidconst int warmupDuration = 5000; // flikkertijdconst int fullBrightnessPause = 3000; // Na flikkeren en fade up start de sequentie na de ingesteld tijd opnieuwint fadeDuration = 5000; // na flikkeleren start de Led op 50% helderheid en gaat in de ingeschakelde tijd naar max// Status variabelenenum LightState { OFF, FLICKER, HALF, FADE_UP, PAUSE };LightState currentState = OFF;unsigned long stateStartTime;int currentBrightness = 0;bool isEnabled = false;void setup() { pinMode(pwmPin, OUTPUT); pinMode(enablePin, INPUT_PULLUP); analogWrite(pwmPin, 0); randomSeed(analogRead(5));}void loop() { 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); 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) { // Herstart de hele sequentie currentState = FLICKER; stateStartTime = currentTime; } break; }}