Hallo,
ich mache zZ meine ersten Versuche damit, das Uhren-IC DS1307 zu testen und habe in dem folgenden Sketch einen Fehler, den ich nicht verstehe:
Ich möchte erreichen, dass die Zeit für die LOOP entweder von den vor dem SETUP definierten Werten Sekunden bis Jahr übernommen wird, oder von der Zeit, die das Uhren-IC aktuell hat.
Dazu gebe ich vom SM in den ersten 5 s nach Programmstart entweder ein "j" oder ein "n" ein, was in die Variable "Zeit_einlesen" übernommen wird.
Schreibe ich in die Zeile 47 "if (Zeit_einlesen == "j")" , was ich für richtig halte, dann wird der anschließende Programmteil nicht durchlaufen ("Zeit_einlesen 2 = ....." wird nicht ausgegeben), obwohl unmittelbar vorher "Zeit_einlesen 1 = j" ausgegeben wird.
Schreibe ich in die Zeile 47 "if (Zeit_einlesen = "j")" , was ich für falsch halte, dann wird der anschließende Programmteil durchlaufen ("Zeit_einlesen 2 = j" wird ausgegeben). Dabei ist es egal, ob ich ein j oder ein n schicke.
Wo ist da der Wurm drin?
vG
fredyxx
Code:
/*
Mit diesem Programm wird das Uhren - IC getestet
*/
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgramm.h"
#endif
#include <Wire.h>
#include <DS1307.h>
int Sekunden = 1; // Vorgaben für den Durchlauf von SETUP
int Minuten = 1;
int Stunden = 1;
int Tag_der_Woche = 1; // Mo = 1; Di = 2
int Tag = 1;
int Monat = 1;
int Jahr = 17;
String Zeit_einlesen;
void setup() {
Serial.begin(9600); // Serielle SS für Ausgabe
while (!Serial) {
// wait for serial port to connect. Needed for native USB port only
} // >>>> Ende while
delay(5000); // 5 Sekunden lang Zeit für die Eingabe j oder n
Serial.println ("");
Serial.println (" j = Zeit aus dem Programm uebernehmen; n = Zeit vom Uhren-IC");
Serial.println ("");
Zeit_einlesen = Serial.readString(); //
Serial.print("Zeit_einlesen 1 = ");
Serial.println(Zeit_einlesen);
if (Zeit_einlesen == "j") {
Serial.print("Zeit_einlesen 2 = ");
Serial.println(Zeit_einlesen);
RTC.stop();
RTC.set(DS1307_SEC, Sekunden); // Sekunden setzen
RTC.set(DS1307_MIN, Minuten); // Minuten setzen
RTC.set(DS1307_HR, Stunden); // Stunden setzen
RTC.set(DS1307_DOW, Tag_der_Woche); // Tag der Woch setzen
RTC.set(DS1307_DATE, Tag); // Datum Tag setzen
RTC.set(DS1307_MTH, Monat); // Datum Monat setzen
RTC.set(DS1307_YR, Jahr); // Datum Jahr setzen
RTC.start();
} // >>>> Ende if (Zeit_einlesen == "j")
} // >>>> Ende Setup
void loop() {
// Daten vom Uhrenbaustein lesen
Serial.print(RTC.get(DS1307_HR, true));
Serial.print(":");
Serial.print(RTC.get(DS1307_MIN, false));
Serial.print(":");
Serial.print(RTC.get(DS1307_SEC, false));
Serial.print(" ");
Serial.print(RTC.get(DS1307_DATE, false));
Serial.print("/");
Serial.print(RTC.get(DS1307_MTH, false));
Serial.print("/");
Serial.print(RTC.get(DS1307_YR, false));
Serial.println();
if ( RTC.get(DS1307_SEC, false) == 30) {
Serial.println("JA"); // gibt immer bei 30 Sekunden ein JA aus!!
}
delay(1000); // 1 Sekunde warten
}
Lesezeichen