// Configuratieconst int numLeds = 3; // Aantal LED'sconst int ledPins[numLeds] = {2, 3, 4}; // Pinnen waar de LED's op aangesloten zijn// Min en max aan-tijden in milliseconden voor elke LEDconst unsigned long minTimes[numLeds] = {100, 200, 300}; // Minimale aan-tijd per LEDconst unsigned long maxTimes[numLeds] = {500, 800, 1000}; // Maximale aan-tijd per LED// Variabelen voor timingunsigned long previousTimes[numLeds]; // Laatste keer dat elke LED veranderdeunsigned long intervals[numLeds]; // Huidige interval voor elke LEDbool ledStates[numLeds]; // Huidige staat van elke LEDvoid 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); } }}
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.
// Configuratieconst int numLeds = 3; // Aantal LED'sconst int ledPins[numLeds] = {2, 3, 4}; // Pinnen waar de LED's op aangesloten zijn// Min en max aan-tijden in milliseconden voor elke LEDconst unsigned long minTimes[numLeds] = {100, 200, 300}; // Minimale aan-tijd per LEDconst unsigned long maxTimes[numLeds] = {500, 800, 1000}; // Maximale aan-tijd per LED// Variabelen voor timingunsigned long previousTimes[numLeds]; // Laatste keer dat elke LED veranderdeunsigned long intervals[numLeds]; // Huidige interval voor elke LEDbool ledStates[numLeds]; // Huidige staat van elke LEDvoid 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]); } }}
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 ;
#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 ) ; } } } }}