RTC stellen per Taster
|
14.08.2014, 23:38
Beitrag #1
|
|||
|
|||
RTC stellen per Taster
Hallo, erstmal kurz was ich vor habe, dann ein paar Worte über meine Probleme.
Also ich nutze den Arduino Mega 2560, ein RTC DS1307 ein paar Taster mehrere Counter und der Rest ist hierfür unwichtig. Ich hätte gerne die Möglichkeit, die Uhrzeit der RTC über die Taster zu ändern. Also zumindest die Stunden und wenn möglich auch die Minuten. Ich habe da schon viel ausprobiert, war aber wohl alles total falsch und jetzt habe ich auch noch versehentlich meinen Sketch gelöscht, an dem ich schon einige Tage hing. Mir fehlt auf jeden Fall der richtige Ansatz. Ich habe die RTClib.h genutzt und versucht die Werte für Stunden und Minuten mit jeweils ein Variablen zu bearbeiten. Sowas wie now.hour() + x . Das funktioniert aber nicht, hat sicherlich auch seinen Grund, warum es nicht geht aber den kenn ich leider nicht. Also meine Frage ist eigentlich erstmal ob es geht und wenn ja, ob es für jemanden mit 2 Monaten Erfahrung auch möglich ist sowas zu schreiben? Die Möglichkeit die Uhr wenn sie nicht mehr Richtig geht am PC zu stellen ist nicht möglich, da ich das ganze für jmd. mache, der das auf jeden Fall nicht hinbekommen wird ![]() |
|||
15.08.2014, 08:14
Beitrag #2
|
|||
|
|||
RE: RTC stellen per Taster
Moin Sascha,
soweit ich das verstanden habe kannst du die Zeit nur über .adjust() setzen. Diese Funktion erwartet aber immer die komplette Angabe aller Datums- und Zeitelemente. Wenn du also Stunden, Minuten ändern möchtest, müsstest du zuvor mit now.year(),now.day() etc. die aktuellen Werte in Variablen lesen, per Taster die gewünschten Elemente/Variablen ändern und dann wieder geschlossen zurückschreiben. Ich würde eher die Time Library benutzen. Die spricht auch mit der DS1307 und bietet mehr Möglichkeiten zum selektiven setzen der Elemente. Im example-Ordner der Time Lib gibts dazu auch ein Beispiel. Grüße Ricardo Nüchtern betrachtet...ist besoffen besser ![]() |
|||
15.08.2014, 14:16
(Dieser Beitrag wurde zuletzt bearbeitet: 15.08.2014 14:26 von Sascha.)
Beitrag #3
|
|||
|
|||
RE: RTC stellen per Taster
Hi Ricardo
Ich habe zu deinen beiden Ansätzen noch einmal eine Frage. rtc.begin(DateTime(F(__DATE__), F(__TIME__))); Könnte ich hier für DATE und TIME einfach Variablen einsetzen? Andere Frage, die time lib habe ich auch, aber welches Beispiel meinst du? Danke Ich glaube auch eins meine Probleme ist der Mega, ich habe die RTC zuerst am UNO getestet, dort konnte ich die Zeit manuelle stellen, also über den Sketch. Jetzt am Mega habe ich zwar die Pins 20 und 21 angeschlossen aber es Lässt sich die Zeit nicht mehr über adjust() stellen . |
|||
15.08.2014, 14:54
Beitrag #4
|
|||
|
|||
RE: RTC stellen per Taster
Naja, __DATE__ und __TIME__ sind vordefinierte Konstanten und an dem Code
Code: rtc.begin(DateTime(F(__DATE__), F(__TIME__))); Bei __DATE__ sieht der zB. so aus: "Dec 22 2013" (ohne Anführungszeichen) __TIME__ sollte wie "12 00 00" aussehen. Du kannst ja über den SerialMonitor einfach mal beide Konstanten printen. Da es Strings sind sollte man die Bestandteile leicht über die Funktionen der String-Klasse mit Variablen belegen können. Zitat:... aber welches Beispiel meinst du?Ich meinte TimeRTCSet und das Processing - Beispiel. Beide arbeiten zusammen. Wenn du auf einer Linux-Kiste arbeitest, kannst du anstatt des Processing-Sketch auch "date +T%s > /dev/ttyACM0" (ohne Anführungszeichen) benutzen. Die "0" musst du an deinen Arduino - Port in der IDE anpassen. Beides zusammen setzt dann die RTC auf die Zeit des PC. Grüße RK Nüchtern betrachtet...ist besoffen besser ![]() |
|||
15.08.2014, 15:07
Beitrag #5
|
|||
|
|||
RE: RTC stellen per Taster
Haha,
Also so ca. 50% von dem was du geschrieben hast verstehe ich. Die Sache mit den Strings ist, dass zwar schon einiges darüber gelesen habe, aber richtig verstehen werde ich es erst, wenn ich damit arbeite und selbst welche erstelle. So weit bin ich leider noch nicht. Danke trotzdem, aber mit mir muss man noob deutsch reden ![]() |
|||
15.08.2014, 15:51
Beitrag #6
|
|||
|
|||
RE: RTC stellen per Taster
Sorry,
ein gutes Beispiel wie man per SerialMonitor Datum und Uhrzeit setzen kann (zwar nicht mit Variablen, aber durch Eingaben am Monitor) ist hier zu finden: http://www.instructables.com/id/Setting-...the-Seria/ Dabei wird keine spezielle Lib für die DS1307 gebraucht. Die Anpassung an die Übergabe von Variablen sollte aber unkompliziert sein. Grüße Ricardo Nüchtern betrachtet...ist besoffen besser ![]() |
|||
15.08.2014, 16:04
(Dieser Beitrag wurde zuletzt bearbeitet: 15.08.2014 16:06 von Sascha.)
Beitrag #7
|
|||
|
|||
RE: RTC stellen per Taster
Danke, also ich habe die Uhrzeit auf dem SerialMonitor und auf dem lcd, soweit passt alles, nur das anpassen geht nicht.
Ich habe es gerade so versucht Setup()....... rtc.adjust(DateTime(2014, 1, 21, x, y, 0)); .............. void Loop().......... buttonState = digitalRead(t1); if (buttonState == HIGH) { buttonStateHIGH = 1; } if (buttonState == LOW && buttonStateHIGH == 1) { x++; buttonStateHIGH = 0; } ........... den kompletten Code poste ich lieber nicht, da dort auch noch die Zeitschaltuhr, Temperatur, Luftfeucht usw. drin sind und der ca. 14 Seiten hat. Problem hierbei ist, dass ich zwar die Zeit per Taster stellen kann, aber die Uhr selbst nicht weiter läuft. |
|||
15.08.2014, 16:12
Beitrag #8
|
|||
|
|||
RE: RTC stellen per Taster
Wenn man in der RTClib.h nachschaut, sieht man, dass DateTime folgendes erwartet:
Zitat:DateTime (uint16_t year, uint8_t month, uint8_t day,Du müsstest also schon deine Werte auf entsprechend deklarierte Variablen legen und diese Variablen dann an DateTime übergeben. RK Nüchtern betrachtet...ist besoffen besser ![]() |
|||
|
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste