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


}