Uitgang vertraagd uitschakelen

Arduino specifieke Software
Berichten: 47
Geregistreerd: 02 Dec 2018, 12:19

Uitgang vertraagd uitschakelen

Berichtdoor Looitje » 12 Feb 2024, 11:07

Ik wil een pomp die in- en uitschakelt door een drukschakelaar direct laten inschalen bij het sluiten van het contact van de drukschakelaar maar bij het openen van het contact van de drukschakelaar zou de pomp nog een paar seconden verder moeten draaien.
Ik dacht dat dit kon met bijgevoegde code maar de vertraging is nu ook bij het inschakelen en dit mag niet.
Ik begrijp ook niet hoe dit kan daar de delay toch achter de else staat?
Hoe kan ik dit oplossen dat de vertraging alleen actief is bij het uitschakelen?

Code: Alles selecteren
const int drukschakelaar = 2;
const int A = 5;

void setup() {
    pinMode(drukschakelaar, INPUT);
        pinMode(A, OUTPUT);
}
 
void loop() {
    if (digitalRead(drukschakelaar) == HIGH) {
       digitalWrite(A, HIGH); 
    }
    else {
      delay(2000);
      digitalWrite(A, LOW); 
    }
}               
       
Met vriendelijke groet, Looitje

Advertisement

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

Re: Uitgang vertraagd uitschakelen

Berichtdoor ThHe » 12 Feb 2024, 12:35

De else tak een extra voorwaarde geven is bv een oplossing.

Code: Alles selecteren
const int drukschakelaar = 2;
const int A = 5;
bool pompLoopt = false;

void setup() {
    pinMode(drukschakelaar, INPUT);
        pinMode(A, OUTPUT);
}
 
void loop() {
    if (digitalRead(drukschakelaar) == HIGH) {
       digitalWrite(A, HIGH);
       pompLoopt = true;
    }
    else if (pompLoopt) {
      delay(2000);
      digitalWrite(A, LOW);
      pompLoopt = false;
    }
}

Berichten: 47
Geregistreerd: 02 Dec 2018, 12:19

Re: Uitgang vertraagd uitschakelen

Berichtdoor Looitje » 12 Feb 2024, 12:36

Looitje schreef:Ik wil een pomp die in- en uitschakelt door een drukschakelaar direct laten inschalen bij het sluiten van het contact van de drukschakelaar maar bij het openen van het contact van de drukschakelaar zou de pomp nog een paar seconden verder moeten draaien.
Ik dacht dat dit kon met bijgevoegde code maar de vertraging is nu ook bij het inschakelen en dit mag niet.
Ik begrijp ook niet hoe dit kan daar de delay toch achter de else staat?
Hoe kan ik dit oplossen dat de vertraging alleen actief is bij het uitschakelen?
Of moet ik de Millis gebruiken? Hoe dan?

Code: Alles selecteren
const int drukschakelaar = 2;
const int A = 5;

void setup() {
    pinMode(drukschakelaar, INPUT);
        pinMode(A, OUTPUT);
}
 
void loop() {
    if (digitalRead(drukschakelaar) == HIGH) {
       digitalWrite(A, HIGH); 
    }
    else {
      delay(2000);
      digitalWrite(A, LOW); 
    }
}               
       
Met vriendelijke groet, Looitje

Berichten: 47
Geregistreerd: 02 Dec 2018, 12:19

Re: Uitgang vertraagd uitschakelen

Berichtdoor Looitje » 12 Feb 2024, 12:40

Dag ThHe, bedankt voor uw reactie maar extra voorwaarde snap ik niet.
Wat kan dat zijn dan?
Kan dat bijvoorbeeld met : digitalRead(drukschakelaar) == HIGH naar digitalRead(drukschakelaar) == Low?
Kan dit gedetecteerd worden in Arduino?
Hoe kan ik dat?
Met vriendelijke groet, Looitje

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

Re: Uitgang vertraagd uitschakelen

Berichtdoor ThHe » 12 Feb 2024, 14:05

Omdat de loop direct gaat lopen begin de voorwaarde in de else tak en wacht de delay.
Als bij de volgen loop de knp nog niet isingedrukt gaat hij weer naar de else tak en het delay.
Vandaar dat het lijkt alsof de het indrukken een delay start.

Berichten: 47
Geregistreerd: 02 Dec 2018, 12:19

Re: Uitgang vertraagd uitschakelen

Berichtdoor Looitje » 12 Feb 2024, 17:24

@ThHe, zonet uw code getest en inderdaad, prima oplossing, simpel en goed.
Bedankt daarvoor, nu kan ik verder.
Met vriendelijke groet, Looitje

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Donaldglors, Google [Bot] en 73 gasten