DS1307RCT Zeit manuell setzen

Ich hab zwar in dem Beispiel der Lib ein Beispiel wo man mittels

tmElements_t tm;
RTC.write(tm);

die Zeit setzt, aber das funktioniert ja nur wenn der Arduino am PC hängt und dort die aktuelle Zeit herbekommt?
Wie kann ich dem tmElements_t -Objekt eine vorgebene Zeit Sekunden/minuten/std/Tag/Monat/Jahr
zu weisen. Um die Uhrzeit mittels Knopfen selber einzustellen?

bzw. gäbs noch static bool set(time_t t); also kann man scheinbar auch ein time_t erzeugen. wo da der Unterschied.

tmElements_t ist ein struct das in der Time Library definiert ist (ich nehme an davon reden wird):

typedef struct  { 
  uint8_t Second; 
  uint8_t Minute; 
  uint8_t Hour; 
  uint8_t Wday;   // day of week, sunday is day 1
  uint8_t Day;
  uint8_t Month; 
  uint8_t Year;   // offset from 1970; 
} tmElements_t, TimeElements, *tmElementsPtr_t;

Das kannst du daher wie jedes andere struct auch ändern. z.B. tm.Minute = 30
Beim Jahr musst du aufpassen dass das die Jahre seit 1970 sind. Dazu gibt es in der Time Library auch Makros für die Umrechnung:

#define  tmYearToCalendar(Y) ((Y) + 1970)  // full four digit year 
#define  CalendarYrToTm(Y)   ((Y) - 1970)

Das ist menschenlesbar, deshalb gut für die Eingabe geeignet. time_t ist die Unix-Zeit, d.h. Sekunden seit 1970. Damit kann der Computer gut was anfangen, aber man selbst weniger. Mit maketime() und breaktime() kann man die ineinander umwandeln.

Die Zeit mit einem time_t zu stellen ist z.B. sinnvoll wenn du die Unix-Zeit aus dem Internet holst und damit die RTC stellen willst.

Dann macht ja ggf. Sinn time_t zu verwenden, um einfacher ne bestimmte Sekundenanzhal zur Zeit zu addieren und die dann wieder zu setzen?
Hab bei ner Suche adjustTime(long) fügt das was hinzu?

Genau. Subtrahieren ist da auch möglich, da mit einen Vorzeichen-behafteten Wert übergibt. Das ändert aber nur die lokale Zeit der Time Library. Nicht der RTC!

Ob man time_t oder das tm struct verwendet hängt davon ab was man machen will. Die haben beide ihren Zweck, je nach Situation.

Hallo Zusammen

Ich sende vom Pc zum Arduino folgenen String Serial

uhrstellen;01;11 2015;19:18:22

Zerlege ihn am Arduino und sende ihn dann zum DS3132

RTC.adjust(DateTime(Datum , Zeit ));

bye juergen

ja ich habe vor per "Taster" die Zeit einzustellen. Knopf drücken und dann entweder Sekunden, Minuten, .... um eins vorzustellen.
könnte also adjusttime-Funktion nutzen und dann die Arduino-Zeit wieder in den RTC schreiben :slight_smile:

Hallo Zusammen

Hallo Paddy65305

Ich weis nicht ob in allen Libs RTC.adjust(DateTime(Datum , Zeit ));
vorhanden ist

Ich benutze RTClib

Datum und Zeit kann man ueber einen Char-String setzen

bye juergen

Das adjustTime() was er meint kommt von der Time Library:
http://www.pjrc.com/teensy/td_libs_Time.html

Die zählt die Zeit lokal und synchronisiert sich ab und zu mit einer Zeitquelle