Tijdafhakelijke actie

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

Tijdafhakelijke actie

Berichtdoor Dries » 02 Feb 2024, 11:22

Beste Leden,

Ik hoop dat iemand mij kan helpen.
Ik ben bezig met een tijdafhankelijke actie op de Arduino, dit werkt goed want de led wordt gedurende 5 seconden aangestuurd maar ik wil dat deze puls van 5 seconden wordt bijgehouden in de EEPROM geheugen van de Arduino. In mijn code gebeurt er niets met de teller.
Wat doe ik mis?
Alvast bedankt

```cpp
#include <EEPROM.h>
#include "RTClib.h"
int teller = 0;
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; // 0 = zondag 1 = maandag ...
const int rodeled = 8;

void setup() {
Serial.begin(57600);
teller = EEPROM.read(0);
pinMode(rodeled, OUTPUT);
#ifndef ESP8266
while (!Serial)
; // wait for serial port to connect. Needed for native USB
#endif

if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
while (1) delay(10);
}

if (!rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");
// When time needs to be set on a new device, or after a power loss, the
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
}

void loop() {
DateTime now = rtc.now();

if (((now.dayOfTheWeek() == 0 || now.dayOfTheWeek() == 3 || now.dayOfTheWeek() == 5) && (now.hour() == 14 && now.minute() == 18) && now.second() == 0)) {
teller = teller++;
EEPROM.write(0, teller);
digitalWrite(rodeled, HIGH);
}
if (((now.dayOfTheWeek() == 0 || now.dayOfTheWeek() == 3 || now.dayOfTheWeek() == 5) && (now.hour() == 14 && now.minute() == 18) && now.second() == 5)) {
digitalWrite(rodeled, LOW);
}

Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print("Teller: ");
Serial.print(teller);
Serial.println();
delay(500);
}
```

Advertisement

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

Re: Tijdafhakelijke actie

Berichtdoor ThHe » 02 Feb 2024, 13:12

Code: Alles selecteren
teller = teller++;


Deze code geeft bij een start van teller = 0 altijd als resultaat 0;
De uitleg is de volgende: indien er ++ achter de variabelen staat wordt de ophoging met 1 pas uitgevoerd NA de bewerking.
In dit geval dus:
- Het resultaat wordt 0.
- De teller wordt met 1 opgehoogd dus wordt 1.
- De toekenning van het resultaat aan de teller wordt 0.

Het statement moet dus zijn
Code: Alles selecteren
teller++;
zonder de teller =.

Berichten: 62
Geregistreerd: 05 Feb 2023, 13:30

Re: Tijdafhakelijke actie

Berichtdoor sterretjeToo » 02 Feb 2024, 18:19

Code: Alles selecteren
```cpp

Dit forum heeft geen optie voor markdown :lol:

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

Re: Tijdafhakelijke actie

Berichtdoor Dries » 03 Feb 2024, 18:07

Dit werkt al beter, maar ik krijg telkens een verhoging van 2 in plaats van 1, van de teller. Iemand een idee?

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

Re: Tijdafhakelijke actie

Berichtdoor Dries » 03 Feb 2024, 19:10

led.gif
led.gif (5.61 KiB) 5333 keer bekeken
Ik ben aan het debuggen op de serial en krijg dit:
Dit verklaard waarom mijn teller met 2 wordt verhoogd in plaats van 1 maar wat kan ik hieraan doen?

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

Re: Tijdafhakelijke actie

Berichtdoor ThHe » 03 Feb 2024, 21:03

De delay(500) maakt dat de loop 2 x langs loopt per seconde.
De delay verhogen naar delay(1500)
En om het uit gaan zou ik now.second() == 5 wijzigen in now.second() >= 5 zodat je zeker weet dat het uit gaan niet wordt overgeslagen.
Succes ermee

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

Re: Tijdafhakelijke actie

Berichtdoor Dries » 05 Feb 2024, 10:14

Dit werkt al veel beter :-), kan ik lekker verder met testen, bedankt!

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 87 gasten