tijdschakelaar voor wc ventilator

Arduino specifieke Software
Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

tijdschakelaar voor wc ventilator

Berichtdoor wim2584 » 08 Feb 2017, 22:24

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]

Advertisement

Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar voor wc ventilator

Berichtdoor wim2584 » 08 Feb 2017, 23:18

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:

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
  }
}

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: tijdschakelaar voor wc ventilator

Berichtdoor nicoverduin » 08 Feb 2017, 23:25

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
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar voor wc ventilator

Berichtdoor wim2584 » 08 Feb 2017, 23:36

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

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: tijdschakelaar voor wc ventilator

Berichtdoor nicoverduin » 09 Feb 2017, 00:27

Foto van maken :)
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: tijdschakelaar voor wc ventilator

Berichtdoor Koepel » 09 Feb 2017, 02:24

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.

Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar voor wc ventilator

Berichtdoor wim2584 » 09 Feb 2017, 07:51

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

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: tijdschakelaar voor wc ventilator

Berichtdoor Koepel » 09 Feb 2017, 08:42

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 :?

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: tijdschakelaar voor wc ventilator

Berichtdoor shooter » 09 Feb 2017, 18:38

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.
paul deelen
shooter@home.nl

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: tijdschakelaar voor wc ventilator

Berichtdoor shooter » 09 Feb 2017, 18:38

nu ff plassen
paul deelen
shooter@home.nl

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: gvosatohobcef, KeithGam en 28 gasten