Seconde tellen ?

algemene C code
Berichten: 109
Geregistreerd: 05 Dec 2014, 22:09

Seconde tellen ?

Berichtdoor Palumbus » 17 Apr 2015, 16:10

Wat doe of denk ik hier fout ?

Ik heb een RTC aan mn arduino hangen en doet het prima

echter, ik wil bepaalde acties om de 10 seconde laten uitvoeren
Sensor uitlezen, ventilator aan/uit schakelen enz...

Als ik Time.h gebruik dan zou now() het aantal secondes moeten geven sinds 01-01-1970

Als ik onderstaande code gebruik, wordt de volgende actie pas na ca 65 seconds doorlopen ipv de 10 seconde die ik verwacht....

Maak ik een denk/programmeerfout ?

cpp code
float nLoopTimer = 0;

void setup() {
// RTC en Time
setSyncProvider(RTC.get); // the function to get the time from the RTC
if (timeStatus() != timeSet){
// Serial.println(F("Unable to sync with the RTC"));
}
else {
// Serial.print(F("RTC has set the system time "));
}
}

void loop() {
// Sensor shizzle, elke 10 sec
float nu = now();
if (nu > nLoopTimer+10) {
//
// code elke 10 sec
//
nLoopTimer = now();
}
}

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Seconde tellen ?

Berichtdoor nicoverduin » 17 Apr 2015, 17:33

Ik vind het knap dat je de seconden als float benaderd.....
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Seconde tellen ?

Berichtdoor shooter » 17 Apr 2015, 19:12

nico heeft natuurlijk gelijk,
het is een INT lekker lang hihi
kijk dan eens naar de functie MOD.
en zoals gewoonlijk kijk naar blink without delay, dat hoeft natuurlijk niet met millis() maar kan ook met now()
paul deelen
shooter@home.nl

Berichten: 109
Geregistreerd: 05 Dec 2014, 22:09

Re: Seconde tellen ?

Berichtdoor Palumbus » 18 Apr 2015, 13:44

M.a.w. De fout was dat ik geen float maar long moet gebruiken.
Het getal was te groot voor de float.

Als ik een long gebruik, kan ik nog 23 jaar vooruit.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Seconde tellen ?

Berichtdoor nicoverduin » 18 Apr 2015, 19:19

Nou je kan nog veel meer problemen krijgen als je met een int (of long) moet werken itt een float. De notatie wijze intern voor een float is anders dan die van een int (16 bits) of long(32 bits). Daarnaast is de precisie anders bij een float dan bij de ints en longs. floats hebben op de 8 bits atmels weinig precisie (totaal 7 cijfers). Dat klintk veel, maar mocht je denken het getal 100.12345 nog nauwkeurig te hebben dan heb je het al mis. Op het Arduino platform kom je nog weg met dit soort conversies (int naar float) zonder casting (google maar eens). Bij de grotere platformen krijgt je met de hoogste warning level (en je doet er goed aan om dat toe te passen) de fouten om je oren.
Wees altijd alert op omzettingen tussen int/long/float/char/byte/uintxx_t's. In C kan je veel maar ook veel verkl.t.en
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 109
Geregistreerd: 05 Dec 2014, 22:09

Re: Seconde tellen ?

Berichtdoor Palumbus » 19 Apr 2015, 12:10

Aldoende leert men..
En dat alleen maar om een actie om de 10 seconde te doen...

Maar de manier waarop je reageerde op mn vraag kan ik wel waarderen :D
Wel zeggen wat je fout doet maar niet zeggen wat de oplossing is...

Dank, Zo leer ik weer wat :D

Maar nu heb ik met mn project een heel ander probleem
Waarschijnlijk electrisch gerelateerd..
Hier open ik wel een post voor onder het juiste subforum

Gerard

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 29 gasten