Teller flankdetectie

Arduino specifieke Software
Berichten: 118
Geregistreerd: 28 Dec 2014, 23:20
Woonplaats: Bilzen BE

Teller flankdetectie

Berichtdoor Dries » 12 Mrt 2024, 20:59

Beste Forumleden,

ik ben met een project bezig waarbij een teller moet verhogen indien de blauwe led uitgaat. Ik heb als basis de flankdetectie gebruikt maar ik kom er niet uit. De ledaansturing werkt maar de teller verhoogt niet. Kunnen jullie mij helpen?
Alvast bedankt voor jullie moeite.

RtcDateTime now = Rtc.GetDateTime();
if ((now.Hour() == parameters[TIME_HOUR]) && (now.Minute() == parameters[TIME_MINUTE]) && (now.Second() <= parameters[TIME_SECOND]))
{
digitalWrite(blauweled, HIGH);

}
else
{
digitalWrite(blauweled, LOW);

}
if (statusblauweled != laatstestatusled)
{
teller++;
}
laatstestatusled = statusblauweled;


Serial.print(now.Hour(), DEC);
Serial.print(':');
Serial.print(now.Minute(), DEC);
Serial.print(':');
Serial.print(now.Second(), DEC);
Serial.println();
// Serial.print(now.DayOfWeek(), DEC);
Serial.println(teller);
Serial.println();
}

Advertisement

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

Re: Teller flankdetectie

Berichtdoor ThHe » 12 Mrt 2024, 21:29

Dit is vast niet het hele programma want statusblauweled wordt nergens van een waarde voorzien.
Maar toch een poging op de gegeven code:

Code: Alles selecteren
RtcDateTime now = Rtc.GetDateTime();
if ((now.Hour() == parameters[TIME_HOUR]) && (now.Minute() == parameters[TIME_MINUTE]) && (now.Second() <= parameters[TIME_SECOND]))
{
   digitalWrite(blauweled, HIGH);
   statusblauweled = HIGH;
}
else
{
   digitalWrite(blauweled, LOW);
   statusblauweled = LOW;
}
if (statusblauweled != laatstestatusled &&
    statusblauweLed == LOW)
{
   teller++;
}
laatstestatusled = statusblauweled;

Berichten: 118
Geregistreerd: 28 Dec 2014, 23:20
Woonplaats: Bilzen BE

Re: Teller flankdetectie

Berichtdoor Dries » 12 Mrt 2024, 21:44

Dit is de rest van de functie:

void dosering() {
int statusblauweled = digitalRead(blauweled);
int laatstestatusled = digitalRead(blauweled);
int teller ;
RtcDateTime now = Rtc.GetDateTime();
if ((now.Hour() == parameters[TIME_HOUR]) && (now.Minute() == parameters[TIME_MINUTE]) && (now.Second() <= parameters[TIME_SECOND]))
{
digitalWrite(blauweled, HIGH);
statusblauweled = HIGH;
}
else
{
digitalWrite(blauweled, LOW);
statusblauweled = LOW;
}
if (statusblauweled != laatstestatusled && statusblauweled == LOW)
{
teller++;
}
laatstestatusled = statusblauweled;


Serial.print(now.Hour(), DEC);
Serial.print(':');
Serial.print(now.Minute(), DEC);
Serial.print(':');
Serial.print(now.Second(), DEC);
Serial.println();
// Serial.print(now.DayOfWeek(), DEC);
Serial.println(teller);
// Serial.println(statusblauweled);
Serial.println();
}

Berichten: 118
Geregistreerd: 28 Dec 2014, 23:20
Woonplaats: Bilzen BE

Re: Teller flankdetectie

Berichtdoor Dries » 12 Mrt 2024, 21:50

Geen verandering, de teller blijft op 0 staan

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

Re: Teller flankdetectie

Berichtdoor ThHe » 13 Mrt 2024, 00:38

De oplossing is de volgende:

Code: Alles selecteren
void dosering() {
int statusblauweled = digitalRead(blauweled);
int laatstestatusled = digitalRead(blauweled);
int teller ;
RtcDateTime now = Rtc.GetDateTime();


In je programma zal je waarschijnlijk steeds dosering() aanroepen.
De variable statusblauweled, laatstestatusled en teller worden bij aanroep op 0 gezet als dosering() wordt gestart.

De oplossing kan op 2 manieren:
- De variabele buiten de functie zetten en de laatstestatusled NIET inlezen.

Code: Alles selecteren
int statusblauweled;
int laatstestatusled;
int teller;

void dosering()
{
statusblauweled = digitalRead(blauweled);
// int laatstestatusled = digitalRead(blauweled); //  VERWIJDEREN



- of de variabele static maken dan worden ze maar 1 maal op 0 gezet.
ook moet de laatstestatusled alleen geen digitalRead meer uitvoeren.

Code: Alles selecteren
void dosering() {
int static statusblauweled = digitalRead(blauweled);
int static laatstestatusled;
int static teller ;

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

Re: Teller flankdetectie

Berichtdoor ThHe » 13 Mrt 2024, 00:42

Als aanvulling de statements die ik had toegevoegd kunnen vervallen met uitzondering van het if statement

Code: Alles selecteren
///  statusblauweled = LOW HIGH  // verwijderen.

Berichten: 118
Geregistreerd: 28 Dec 2014, 23:20
Woonplaats: Bilzen BE

Re: Teller flankdetectie

Berichtdoor Dries » 15 Mrt 2024, 12:10

Dit werkt al veel beter.
Bedankt voor je tijd en de moeite :-)

Grts

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Malcolmopege en 8 gasten