Voorloopnullen werken niet goed met RTC

Arduino specifieke Software
Gebruikers-avatar
Berichten: 111
Geregistreerd: 01 Jun 2016, 20:14

Voorloopnullen werken niet goed met RTC

Berichtdoor ruudhot » 01 Jun 2016, 20:27

Hallo allemaal,

Ik ben een ontzettende beginner, dus weet nog niet zoveel van Arduino programmeren.
Nu probeer ik te begrijpen hoe een RTC werkt.

Het volgende programma werkt wel, maar de voorloopnullen bij de minuten en de seconden werken niet OK.
Er wordt namelijk ALTIJD een voorloopnul gegeven, ook als de min/sec onder de 10 zijn.

Hopelijk kan iemand mij uitleggen hoe dit komt.

Alvast dank,
Ruud.






cpp code
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

void setup () {
Serial.begin(9600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
RTC.adjust(DateTime(__DATE__, __TIME__));
}

}

void loop () {
DateTime now = RTC.now();
Serial.print(now.day(), DEC);
Serial.print('-');
Serial.print(now.month(), DEC);
Serial.print('-');
Serial.print(now.year(), DEC);
Serial.print(' ');
Serial.print(' ');
Serial.print(' ');
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
if (now.minute(), DEC <10);
{
Serial.print("0");
}
Serial.print(now.minute(), DEC);
Serial.print(':');
if (now.second(), DEC <10);
{
Serial.print("0");
}
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);
}

Advertisement

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

Re: Voorloopnullen werken niet goed met RTC

Berichtdoor nicoverduin » 01 Jun 2016, 20:36

Dit doe je verkeerd:
cpp code
if (now.minute(), DEC <10);
{
Serial.print("0");
}


Moet zijn:
cpp code
if (now.minute() <10)
{
Serial.print("0");
}


En zo ook voor de seconden

Verder:
a) Je kan meerdere spaties printen tegelijk
b) kopieren van code is meestal de verkeerde aanpak. Meer tijd steken in de taal zelf is altijd beter. Er is ok nog ergens een nederlandse pdf van het ROC (ff googlelen op "Arduino Handleiding ROC") die zeer goed voor jou zou zijn.
c) Leer te programmeren zonder delay(). Afleren is moeilijker dan aanleren. Zie "Blink without delay".
d) google eens op "sprintf en c". De loop kan dan met 90% minder code hetzelfde doen.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 111
Geregistreerd: 01 Jun 2016, 20:14

Re: Voorloopnullen werken niet goed met RTC

Berichtdoor ruudhot » 01 Jun 2016, 20:47

Hallo Nico,

Ontzettend bedankt voor deze tip, het werkt.

Ik heb die handleiding al gevonden en ben daar druk mee bezig.
Het gekke is echter, dat ik nog niets heb gevonden over die " , DEC " gevallen.
Maar misschien heb ik nog niet goed genoeg gezocht.
Ga er wel mee verder hoor, om het te leren, maar zoals vaak, Tijd, Tijd, Tijd!
Bestond een dag maar uit 96 uur.

Maar dit gaat goed, nogmaals dank,
Ruud.

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

Re: Voorloopnullen werken niet goed met RTC

Berichtdoor shooter » 01 Jun 2016, 20:59

Tijd, Tijd , Tijd is now.minute:now.seconds
geintje
en ja nico heeft weer gelijk, opdracht: print de tijd als de seconde verandert.
en doe dat dan in een functie met void printtijd()
paul deelen
shooter@home.nl

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

Re: Voorloopnullen werken niet goed met RTC

Berichtdoor nicoverduin » 01 Jun 2016, 21:46

ruudhot schreef:Hallo Nico,

Ontzettend bedankt voor deze tip, het werkt.

Ik heb die handleiding al gevonden en ben daar druk mee bezig.
Het gekke is echter, dat ik nog niets heb gevonden over die " , DEC " gevallen.
Maar misschien heb ik nog niet goed genoeg gezocht.
Ga er wel mee verder hoor, om het te leren, maar zoals vaak, Tijd, Tijd, Tijd!
Bestond een dag maar uit 96 uur.

Maar dit gaat goed, nogmaals dank,
Ruud.
DEC gebruik je alleen bij print eigenlijk. DEC = Decimaal, HEX = hexadecimaal en BIN is binary.
Ik zou eens goed naar al die printf (printf, sprintf, fprintf) functies zoeken. Ze staan voor formatted print. Alleen floating point is uitgezet bij de Arduino omdat je anders gelijk een kwart van je flash geheugen kwijt bent. Maar daar heb je de functie dtostrf() voor.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 111
Geregistreerd: 01 Jun 2016, 20:14

Re: Voorloopnullen werken niet goed met RTC

Berichtdoor ruudhot » 01 Jun 2016, 22:03

Nico en Paul,

Beiden bedankt, het klinkt nog allemaal als abacadabra, maar ik leer door.
Heb nog niet iets echt goeds gevonden, die handleiding ROC is best leuk, maar gaat niet erg ver.
Wat ik al schreef, die DEC i.c.m. tijd komt niet ter sprake, evenals de printf (printf, sprintf, fprintf) functies.

Een complete C cursus voert misschien wel weer te ver, hoewel je dan wel alles leert natuurlijk.
Eigenlijk zoek ik een handleiding die een beetje in praktische bewoordingen uitlegt wat alle functies doen.

Maar nogmaals, door jullie heb ik toch weer iets geleerd, bedankt.

Groet,
Ruud.

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

Re: Voorloopnullen werken niet goed met RTC

Berichtdoor nicoverduin » 01 Jun 2016, 22:07

Die abracadabra komt door gebrek aan ervaring. Het kunstje wat je nu eenmaal niet uit de boeken leert. Dat je die functies niet in de handleiding ROC vindt komt doordat de handleiding puur basis is voor de taal C op de Arduino. Maar C/C++ is immense veel uitgebreider. Maar je moet eerst maar een beetje basis leren coderen. En als je handig bent kijk je ook naar hoe je moet programmeren. Dat is namelijk iets heel anders. Helaas kan ik het Onderwijs daar tegenwoordig nog weinig op betrappen.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 111
Geregistreerd: 01 Jun 2016, 20:14

Re: Voorloopnullen werken niet goed met RTC

Berichtdoor ruudhot » 01 Jun 2016, 22:34

OK Nico,

Maar ik weet al een beetje dat programmeren mij niet echt in het bloed zit.
Ik moet het (vaak) hebben van bestaande programma's en kijken hoe die werken.
Daarna kan ikzelf wel wat aanpassen en aan elkaar knopen.

Maar goed, ik doe mijn best.


Nogmaals dank,
Ruud.

Gebruikers-avatar
Berichten: 111
Geregistreerd: 01 Jun 2016, 20:14

Re: Voorloopnullen werken niet goed met RTC

Berichtdoor ruudhot » 02 Jun 2016, 00:24

Het is trouwens wel zo, dat ook het printen van meerdere spaties op 1 regel niet lukt. Zodra ik meer dan 1 spatie geef, worden de quotjes zwart i.p.v. blauw, en dan krijg ik rare getallen tussen het jaar en de uren.
Er staat dan b.v. niet 02-06-2016 0:10:12 maar 02-06-201682240:10:12

Ik dacht ook dat je op 1 regel Serial.print('spatie spatie spatie '); kon geven, maar dat werkt niet.

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

Re: Voorloopnullen werken niet goed met RTC

Berichtdoor nicoverduin » 02 Jun 2016, 07:42

Je moet dubbele quotes gebruiken bij strings. Er is een wezenlijk verschil tussen een enkele en dubbele quote.
Dus:
cpp code
Serial.print("     dit zijn 5 spaties hiervoor");

Werkt prima
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: RussellAlets en 22 gasten