Timer om led een periode aan en uit te schakelen in 24 uur

Arduino specifieke Software
Berichten: 79
Geregistreerd: 17 Mrt 2016, 17:05
Woonplaats: Julianadorp

Timer om led een periode aan en uit te schakelen in 24 uur

Berichtdoor Creator » 29 Nov 2024, 17:49

Net zoals de kerst verlichting op batterijen met een een (6 uur aan) - (18 uur uit) timer.

Nu is een klok van 24 uur programmeren niet het probleem maar hoe nu een deel van een sketch aan die 6 uur koppelen
waarna de sketch moet stoppen zodat de led uitgaat voor 18 uur.
Dit is misschien heel simpel maar ik zie het niet.
Wie kan mij in de juiste richting duwen ;)

mijn sketch is nu als volgt.


/*
Simulation of flashing lighthouse light "Brandaris" location Terschelling Netherlands
Light caracter is FlW5 (1 flash every 5 seconds)
*/

// declaration for fading of the light
int step = 12; // time between fading steps
int flash = step * 30; // calculate strobe duration
int maxFade = 150; // max led output on end fading
int ledPin = 3; // LED connected to pin 3 (Uno)


// Simple but accurate counter for clock
unsigned long previousMillis = 0; // Set counter to zero
const long interval = 1000; // Interval 1 sec (1000 milliseconds)
uint8_t prSec, prMin, prHr; // 8bit for temp time storage

void setup() {
}

void loop() {
unsigned long currentMillis = millis(); // The counter in millis
if (currentMillis - previousMillis >= interval) // Makes every second count

{
previousMillis = currentMillis; // Checked if second complete

if (prSec < 59) prSec++; // Till 60 sec
else {
prSec = 0;
if (prMin < 59) prMin++; // Till 60 min
else {
prMin = 0;
if (prHr < 24) prHr++; // Till 24 Hours
else prHr = 0;
}
}
previousMillis = currentMillis; // Verify a second past
}

/*
hier moet dus iets komen wat de "Flash" moet activeren voor 6 uur en daarna deactiveren (uit moet zetten) voor 18 uur waarna het proces weer opnieuw beginnen.
*/

Flash();
}



void Flash() {
for (int fadeValue = 0; fadeValue <= maxFade; fadeValue += 2) // total time used until flash (150/2=75 75x12=900 msec) simulating rotation speed
{
analogWrite(ledPin, fadeValue);
delay(step);
}

analogWrite(ledPin, 255); //max led brightness
delay(flash); //Flash period (10x30=300sec)
analogWrite(ledPin, maxFade);

for (int fadeValue = maxFade; fadeValue >= 0; fadeValue -= 2) {
analogWrite(ledPin, fadeValue);
delay(step);
}
delay(3900);
}

Advertisement

Gebruikers-avatar
Berichten: 64
Geregistreerd: 22 Jun 2013, 00:04

Re: Timer om led een periode aan en uit te schakelen in 24 u

Berichtdoor Duiker » 02 Dec 2024, 09:52

@ Creator, bij deze een poging om je een duw in de juiste richting te geven. Het is geen kant en klare oplossing.

void loop() {

bool Actie_1 = false;
bool Actie_2 = false;

if (currentMillis - previousMillis <= interval { // interval = 6 uur
bool Actie_1 = true;
}

if ( (currentMillis - previousMillis > interval) and (currentMillis - previousMillis <= interval + 18 uur){
bool Actie_1 = false;
bool Actie_2 = true
}

if Actie_1 == true { Doe iets}
if Actie_2 == true { Doe iets anders};

} //loop


Het is een duw in een richting he. Wat nog fout gaat is dat "Doe iets" bij iedere tijdscontrole wortd uitgevoerd. Maar dat los je wel op met nog een boolean in de Doe iets en Doe iets anders functie.
We leven in het midden van de ruimte, maar aan de rand van de tijd.

Berichten: 99
Geregistreerd: 02 Nov 2022, 13:03

Re: Timer om led een periode aan en uit te schakelen in 24 u

Berichtdoor ThHe » 04 Dec 2024, 22:10

Even de timer code als duwtje in de goede richting.

Code: Alles selecteren
unsigned long timer = 0;
bool timerOn = false;

#define TIMER_ON    1000L*60*60*6   //  6 uur 
#define TIMER_OFF   TIMER_ON * 3    // 18 uur

void setup() {
    timer   = millis() + TIMER_ON;  // Start timer ON
    timerOn = true;
}

void loop() {
    if (timer < millis()) {             // Timer is afgelopen
        timerOn = !timerOn;         //Switch de timer;
        timer   = millis() + (timerOn ? TIMER_ON : TIMER_OFF); // Opnieuw de timer aan of uit zetten
    }
    if (timerOn) {
        // Timer is aan
    } else {
        // Timer is uit
    }
 }

Berichten: 79
Geregistreerd: 17 Mrt 2016, 17:05
Woonplaats: Julianadorp

Re: Timer om led een periode aan en uit te schakelen in 24 u

Berichtdoor Creator » 05 Dec 2024, 11:46

Bedankt beide voor de suggesties en vooral thhe. Ik was zelf nog te moeilijk aan het denken met een klok maar je oplossing is zo simpel als je het ziet.
Ik ben in ieder geval weer wijzer geworden nogmaals bedankt daarvoor.
In de flash sketch heb ik de delay eruit gehaald en vervangen voor de millis oplossing zodat alles doorloopt.
Hieronder de werkende code voor een vuurtoren licht met timer.



CODE

/*
Simulation of flashing light of lighthouse "Brandaris" location Terschelling Netherlands
Light caracter is FlW5 (1 flash every 5 seconds)
*/

// declaration for timing of the light
int step = 10; // pauze time between fading steps
int flash = step * 30; // calculate strobe duration
int maxFade = 168; // max led output at fading
const int ledPin = 3; // LED connected to pin 3 (Uno) (analog output pin)

//Waiting time between flashes
unsigned long previousMillis = 0;
const long interval = 1000; // 1 second counter
const long waiting = 3500; // 3,5 sec waiting between flashes

//Define clock for On-Off period
unsigned long timer = 0;
bool timerOn = false;
#define TIMER_ON 1000L*60*60*6 // 6 hour period
#define TIMER_OFF TIMER_ON * 3 // 18 hour periiod


void setup() {
timer = millis() + TIMER_ON; // Start timer ON
timerOn = true;
}


void loop() {
if (timer < millis()) { // Timer is finished
timerOn = !timerOn; // Switch the timer;
timer = millis() + (timerOn ? TIMER_ON : TIMER_OFF); // Loop to determine Timer is On or Off
}
if (timerOn) {
Flash(); // Timer is On execute Void flash
} else {
// Timer is Off do nothing
}
}


void Flash() {
unsigned long currentMillis = millis(); // define second per count
if (currentMillis - previousMillis >= waiting) // calculate time to wait
{
previousMillis = currentMillis; // check if second has passed

for (int fadeValue = 0; fadeValue <= maxFade; fadeValue += 3) // total time used until flash (168/3=56 steps 56x10=560 msec) simulating rotation speed
{
analogWrite(ledPin, fadeValue); // output to led
delay(step); // delay stops program for 10 millis for 55 times = 550 millis
}

analogWrite(ledPin, 255); // max led brightness
delay(flash); // Flash period (10x30=300 millis)
analogWrite(ledPin, maxFade); // output to led

for (int fadeValue = maxFade; fadeValue >= 0; fadeValue -= 3) // total time used until dark (168/3=56 steps 56x10=560 msec) simulating rotation speed
{
analogWrite(ledPin, fadeValue); // output to led
delay(step); // delay stops program for 10 millis for 55 times = 550 millis
} // give a total delay (program stop) of 1.4 sec every cycle
}
} // End of flash

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten