Tijdafhakelijke actie
8 berichten
• Pagina 1 van 1
Tijdafhakelijke actie
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);
}
```
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
Re: Tijdafhakelijke actie
- 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++;
- sterretjeToo
- Berichten: 62
- Geregistreerd: 05 Feb 2023, 13:30
Re: Tijdafhakelijke actie
- Code: Alles selecteren
```cpp
Dit forum heeft geen optie voor markdown
Re: Tijdafhakelijke actie
Dit werkt al beter, maar ik krijg telkens een verhoging van 2 in plaats van 1, van de teller. Iemand een idee?
Re: Tijdafhakelijke actie
Dit verklaard waarom mijn teller met 2 wordt verhoogd in plaats van 1 maar wat kan ik hieraan doen?
Re: Tijdafhakelijke actie
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
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
Re: Tijdafhakelijke actie
@ThHe,
Je schrijft "De delay(500) maakt dat de loop 2 x langs loopt per seconde."
Ik moest toch even hierover nadenken. Maar het heeft dus te maken met de RTC die iedere ongeveer 500 mS wordt uitgelezen.
Je schrijft "De delay(500) maakt dat de loop 2 x langs loopt per seconde."
Ik moest toch even hierover nadenken. Maar het heeft dus te maken met de RTC die iedere ongeveer 500 mS wordt uitgelezen.
We leven in het midden van de ruimte, maar aan de rand van de tijd.
8 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: iholahiqem en 8 gasten