Go Down

Topic: DS1307 Lib (Read 1 time) previous topic - next topic

Serenifly

#15
Aug 04, 2013, 10:37 pm Last Edit: Aug 04, 2013, 10:43 pm by Serenifly Reason: 1
Du verwendest auch Time nicht korrekt (oder es war nur als Test). Time ist zugegebenerweise recht kompliziert an manchen Stellen. Aber schau dir mal die Beispiele an die da dabei sind.

Wenn du das machst:
Code: [Select]
sprintf(lcdline,"%02d:%02d:%02d",hour(),minute(),second());
zeigt Time die aktuelle Uhrzeit an. Einfach () und keine Parameter übergeben. Der zählt halt dann lokal auf dem Arduino und verliert die Zeit beim Ausschalten. Deshalb gibt es die sync-Funktion mit einem Zeitgeber.

Bei der RTC geht das einfach so:
Code: [Select]
lcd.print(rtc.getDateStr());
Du musst du Uhr halt auch erst mal stellen. Das ist bei Time auch der Fall.

Bei Time gibt es auch noch eine andere Möglichkeit, und zwar wenn man erst mal einen time_t in ein leserliches TimeElements struct umwandelt:
Code: [Select]

TimeElements tm;
time_t time = RTC.now();
breakTime(time, tm);


Dann kann man über tm.Hour, tm.Minute, tm.Day etc. auf alle Werte zugreifen. Wenn man direkt hour(), etc. macht, führt er das jedesmal im Hintergrund aus.


So kann man auch die Uhr stellen:
Code: [Select]

TimeElements tm;
tm.Day = 4;
tm.Month = 8;
tm.Year = CalendarYrToTm(2013);
tm.Wday = 5;
tm.Hour = 12;
tm.Minute = 20;
tm.Second = 0;
time_t time = makeTime(tm);
setTime(time);


skorpi08

Code: [Select]
      sprintf(lcdline,"%02d:%02d:%02d",hour(g_thread_tTimer),minute(g_thread_tTimer),second(g_thread_tTimer));


Da gib ich doch Werte rüber.
Aus dem ersten Post war nur "Test".

Mit RTC hab ichs auch so gemacht, nachdem es anders nicht ging.

Das gute an der DS1307 Lib ist, dass man nichts auskommentieren muss, um die Zeit einzustellen.
einfach den hier machen und schon alles erledigt

Code: [Select]
rtc.setTime(t.hour++,t.min,t.sec);
Nicht Mensch, nicht Tier: Programmierer halt...

Go Up