Timer om led een periode aan en uit te schakelen in 24 uur
4 berichten
• Pagina 1 van 1
Timer om led een periode aan en uit te schakelen in 24 uur
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);
}
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
Re: Timer om led een periode aan en uit te schakelen in 24 u
@ 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.
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.
Re: Timer om led een periode aan en uit te schakelen in 24 u
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
}
}
Re: Timer om led een periode aan en uit te schakelen in 24 u
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
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
4 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten