Tijdafhakelijke actie
7 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
7 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: GlenntikBrume en 4 gasten