tijdschakelaar voor wc ventilator
36 berichten
• Pagina 1 van 4 • 1, 2, 3, 4
tijdschakelaar voor wc ventilator
Helaas heb ik het nog niet goed begrepen met current millis,
Ik wilde het volgende
wc ventilator control
licht aan?
korter dan x min (kleine boodschap)
doe niets
langer dan x min ?
ventilator aan
licht uit?
wacht y min
ventilator uit
onderstaande code is niet helemaal wat ik wil, volgens mij kan het (veel) beter, waar kan ik een goede uitleg vinden van:
1 currentmillis en previousmillis?
2 hoe gebruik ik if
mag ik :
if ((xxx==HIGH)&&(yyy=LOW))
nu weer if gebruiken?
hoe kan ik anders een voorwaarde controleren en dat pas naar de volgende voorwaarde kijken??
het programmeren is voor mij nog moeilijk
[code// wc ventilator tijdschakelaar
//Wim Lemson 8-2-2017
int ventilator = 3; // ventilator uitgang aansluiting
int licht = 8; // lichtschakelaar
unsigned long previousMillis = 0;
unsigned long wacht = 10000; // milliseconds of wachttijd
unsigned long ventilator_aan = 15000; // milliseconds of ventilator aan tijd
int state_ventilator = LOW; // ventilator status
int state_licht = LOW; // licht status
void setup()
{
// set the digital pin as follow:
pinMode(ventilator, OUTPUT);
pinMode (licht, INPUT_PULLUP);
}
void loop()
{
unsigned long currentMillis = millis();
state_licht = digitalRead (licht);
if (state_licht == HIGH)
{
delay(10000);
state_ventilator = HIGH; // Turn it on
digitalWrite(ventilator, state_ventilator); // Update the actual ventilator stand
}
if ((state_licht == LOW)&& (currentMillis - previousMillis >= ventilator_aan))
{
state_ventilator = LOW;
digitalWrite(ventilator, state_ventilator); // Update the actual ventilator stand
previousMillis = currentMillis;
}
}
][/code]
Ik wilde het volgende
wc ventilator control
licht aan?
korter dan x min (kleine boodschap)
doe niets
langer dan x min ?
ventilator aan
licht uit?
wacht y min
ventilator uit
onderstaande code is niet helemaal wat ik wil, volgens mij kan het (veel) beter, waar kan ik een goede uitleg vinden van:
1 currentmillis en previousmillis?
2 hoe gebruik ik if
mag ik :
if ((xxx==HIGH)&&(yyy=LOW))
nu weer if gebruiken?
hoe kan ik anders een voorwaarde controleren en dat pas naar de volgende voorwaarde kijken??
het programmeren is voor mij nog moeilijk
[code// wc ventilator tijdschakelaar
//Wim Lemson 8-2-2017
int ventilator = 3; // ventilator uitgang aansluiting
int licht = 8; // lichtschakelaar
unsigned long previousMillis = 0;
unsigned long wacht = 10000; // milliseconds of wachttijd
unsigned long ventilator_aan = 15000; // milliseconds of ventilator aan tijd
int state_ventilator = LOW; // ventilator status
int state_licht = LOW; // licht status
void setup()
{
// set the digital pin as follow:
pinMode(ventilator, OUTPUT);
pinMode (licht, INPUT_PULLUP);
}
void loop()
{
unsigned long currentMillis = millis();
state_licht = digitalRead (licht);
if (state_licht == HIGH)
{
delay(10000);
state_ventilator = HIGH; // Turn it on
digitalWrite(ventilator, state_ventilator); // Update the actual ventilator stand
}
if ((state_licht == LOW)&& (currentMillis - previousMillis >= ventilator_aan))
{
state_ventilator = LOW;
digitalWrite(ventilator, state_ventilator); // Update the actual ventilator stand
previousMillis = currentMillis;
}
}
][/code]
Advertisement
Re: tijdschakelaar voor wc ventilator
nog eens geprobeerd met "DELAY"
lijkt redelijk te werken, maar de tijden kloppen niet??
na licht aan duurt het veel langer dan de aangegeven delay?, hetzelfde voor de uittijd.
verder is het (volgens mij ) veel beter als tijdbepalend element currentmillis-previousmillis te gebruiken, maar bij twee tijden (wachten voor aangaan en wachten met uitgaan) , moet ik dan bv. prevousmillis1 en previousmillis2 gebruiken?
verder zou ik graag de ventilator uit timer starten als het licht uit is , dus altijd dezelfde naloop tijd
de code met alleen delay erin:
lijkt redelijk te werken, maar de tijden kloppen niet??
na licht aan duurt het veel langer dan de aangegeven delay?, hetzelfde voor de uittijd.
verder is het (volgens mij ) veel beter als tijdbepalend element currentmillis-previousmillis te gebruiken, maar bij twee tijden (wachten voor aangaan en wachten met uitgaan) , moet ik dan bv. prevousmillis1 en previousmillis2 gebruiken?
verder zou ik graag de ventilator uit timer starten als het licht uit is , dus altijd dezelfde naloop tijd
de code met alleen delay erin:
- Code: Alles selecteren
// wc ventilator tijdschakelaar
//Wim Lemson 8-2-2017
int ventilator = 3; // ventilator uitgang aansluiting
int licht = 8; // lichtschakelaar
int state_ventilator = LOW; // ventilator status
int state_licht = LOW; // licht status
void setup()
{
// set the digital pin as follow:
pinMode(ventilator, OUTPUT);
pinMode (licht, INPUT_PULLUP);
}
void loop()
{
state_licht = digitalRead (licht);
if (state_licht == HIGH)
{
delay(10000);
state_ventilator = HIGH; // Turn it on
digitalWrite(ventilator, state_ventilator); // Update the actual ventilator stand
}
if (state_licht == LOW)
{
delay (15000);
state_ventilator = LOW;
digitalWrite(ventilator, state_ventilator); // Update the actual ventilato stand
}
else
{
state_ventilator = HIGH; // Turn it on
digitalWrite(ventilator, state_ventilator); // Update the actual ventilator stand
}
}
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: tijdschakelaar voor wc ventilator
Dat komt omdat je elke keer weer die delays uitvoert als het licht nog aan is. Delay is hier geen optie
Je moet het probleem uit elkaar trekken... De schakelaar bepaalt of de timer moet gaan lopen.
Een apart stukje code in de loop kijkt of deze is verlopen. Je hebt namelijk meerdere toestanden die je beter eerst een op een velletje papier moet uittekenen.... Om het over/inzicht te krijgen
Je moet het probleem uit elkaar trekken... De schakelaar bepaalt of de timer moet gaan lopen.
Een apart stukje code in de loop kijkt of deze is verlopen. Je hebt namelijk meerdere toestanden die je beter eerst een op een velletje papier moet uittekenen.... Om het over/inzicht te krijgen
Re: tijdschakelaar voor wc ventilator
dat het niet goed was is duidelijk!
maar ik dacht dat na:
if (state_licht == HIGH)
{
delay(10000);
}
deze delay alleen uitgevoerd word als het licht (in dit geval) aan is
??
ik had eerst alles met currentmillis..enz, maar had problemen met
eerst licht aan?
if (state_licht==HIGH)
{
if (nu de time met currentmillis)
{
doe ventilator aan
}
)
maar dit werkt ook niet, vanddar de vraag hoe start ik het kijken van curentmillis-previousmillis pas NADAT het licht aan is?
ik zal eea nog eens goed bekijken, een "flowdiagram" heb ik op papier (nog niet digitaal)
groet WIm
maar ik dacht dat na:
if (state_licht == HIGH)
{
delay(10000);
}
deze delay alleen uitgevoerd word als het licht (in dit geval) aan is
??
ik had eerst alles met currentmillis..enz, maar had problemen met
eerst licht aan?
if (state_licht==HIGH)
{
if (nu de time met currentmillis)
{
doe ventilator aan
}
)
maar dit werkt ook niet, vanddar de vraag hoe start ik het kijken van curentmillis-previousmillis pas NADAT het licht aan is?
ik zal eea nog eens goed bekijken, een "flowdiagram" heb ik op papier (nog niet digitaal)
groet WIm
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: tijdschakelaar voor wc ventilator
Foto van maken
Re: tijdschakelaar voor wc ventilator
Dit is zo'n situatie waarbij de realiteit eenvoudig beschreven kan worden, maar waarbij de code een stuk ingewikkelder blijkt te zijn. Stel dat de ventilator nog aan het nadraaien is, terwijl dan de lamp weer aan gaat. En dat vervolgens eerst de ventilator weer aangezet wordt, terwijl pas daarna het nadraaien afgelopen is.
Volgens mij is daarom één variabele met de status/state niet voldoende. Na een paar minuten nadenken zie ik een State-Change-Detection van de lichtschakelaar, twee statussen en twee software timers voor me. Dit is wat ik voor me zie:
Iemand stapt de wc binnen, doet het licht aan, en zet de ene kookwekker op de plas-tijd. Wanneer de kookwekker afloopt, dan wordt de ventilator aangezet. Eventuele nog lopende andere kookwekker met de nadraai-tijd wordt opgeheven, dus er is dan geen enkele kookwekker aktief. Wanneer diegene klaar is, dan kijkt diegene of de ventilator draait. Draait de ventilator, dan wordt de andere kookwekker op nadraai-tijd gezet. Diegene doet de lamp uit en verlaat de wc.
Volgens mij is daarom één variabele met de status/state niet voldoende. Na een paar minuten nadenken zie ik een State-Change-Detection van de lichtschakelaar, twee statussen en twee software timers voor me. Dit is wat ik voor me zie:
Iemand stapt de wc binnen, doet het licht aan, en zet de ene kookwekker op de plas-tijd. Wanneer de kookwekker afloopt, dan wordt de ventilator aangezet. Eventuele nog lopende andere kookwekker met de nadraai-tijd wordt opgeheven, dus er is dan geen enkele kookwekker aktief. Wanneer diegene klaar is, dan kijkt diegene of de ventilator draait. Draait de ventilator, dan wordt de andere kookwekker op nadraai-tijd gezet. Diegene doet de lamp uit en verlaat de wc.
Re: tijdschakelaar voor wc ventilator
Dit is inderdaad een juiste omschrijving van mijn bedoeling , en omschrijf de problemen die ik tegenkwam...
had nu er over nagedacht, een flowdiagram gemaakt, maar bij de uitvoering toch weer gewezen op het feit dat ik er te simpel over had gedacht.
Ik zal eea nog eens beter bestuderen.
wim
had nu er over nagedacht, een flowdiagram gemaakt, maar bij de uitvoering toch weer gewezen op het feit dat ik er te simpel over had gedacht.
Ik zal eea nog eens beter bestuderen.
wim
Re: tijdschakelaar voor wc ventilator
En toch klopt mijn beschrijving nog steeds niet !
Stel dat de ventilator in de nadraai-tijd zit. Stel dat iemand dan de wc binnenkomt en weer verlaat, nog binnen de plas-tijd. Stel dat op dat moment de ventilator nog steeds in de nadraai-tijd is (van het vorige wc-bezoek). Dan zal volgens mijn beschrijving de nadraai-tijd opnieuw beginnen. Maar de bedoeling is dat de nadraai-tijd van de vorige keer gewoon wordt afgerond en verder niets.
Dus bij het verlaten van de wc, niet zomaar kijken of de ventilator aan is, maar kijken of er geen enkele kookwekker loopt (dan zit de sketch in poep-mode), en alleen dan de nadraai-tijd opnieuw starten.
De if-statements in de sketch kunnen eenvoudiger zijn door een derde status/state te gaan gebruiken. Een status/state voor "plassen" of "poepen".
P.S.: Ik gebruik de woorden waar het om gaat. Dat is om duidelijk te zijn en gewone taal te gebruiken. Hopelijk vinden jullie dat heel normaal
Stel dat de ventilator in de nadraai-tijd zit. Stel dat iemand dan de wc binnenkomt en weer verlaat, nog binnen de plas-tijd. Stel dat op dat moment de ventilator nog steeds in de nadraai-tijd is (van het vorige wc-bezoek). Dan zal volgens mijn beschrijving de nadraai-tijd opnieuw beginnen. Maar de bedoeling is dat de nadraai-tijd van de vorige keer gewoon wordt afgerond en verder niets.
Dus bij het verlaten van de wc, niet zomaar kijken of de ventilator aan is, maar kijken of er geen enkele kookwekker loopt (dan zit de sketch in poep-mode), en alleen dan de nadraai-tijd opnieuw starten.
De if-statements in de sketch kunnen eenvoudiger zijn door een derde status/state te gaan gebruiken. Een status/state voor "plassen" of "poepen".
P.S.: Ik gebruik de woorden waar het om gaat. Dat is om duidelijk te zijn en gewone taal te gebruiken. Hopelijk vinden jullie dat heel normaal
Re: tijdschakelaar voor wc ventilator
maak een statusdiagram, bijna hetzelfde als jouw flow.
je hebt een status 10 bijvoorbeeld alles uit.
als licht aan gaat dan status is 20 (sla de millis op in een variabele(lichtaantijd) en verander status naar 30
in status 30 kijk of (lichtaantijd + plastijd ) < millis() {status wordt 40}else {doe niets}
in status 40 zet ventilator aan en ga naar 50
enzovoorts.
dan moet je een paar beslissingen nog erbij maken zoals wat je doet als tijdens de nadraaitijd het licht weer aangaat.
je hebt een status 10 bijvoorbeeld alles uit.
als licht aan gaat dan status is 20 (sla de millis op in een variabele(lichtaantijd) en verander status naar 30
in status 30 kijk of (lichtaantijd + plastijd ) < millis() {status wordt 40}else {doe niets}
in status 40 zet ventilator aan en ga naar 50
enzovoorts.
dan moet je een paar beslissingen nog erbij maken zoals wat je doet als tijdens de nadraaitijd het licht weer aangaat.
paul deelen
shooter@home.nl
shooter@home.nl
36 berichten
• Pagina 1 van 4 • 1, 2, 3, 4
Wie is er online?
Gebruikers in dit forum: gvosatohobcef, KeithGam en 28 gasten