DS1307 Uhrzeit und Datum einstellen

Hallo, ich lese seit einigen Wochen sehr interessiert in diesem Forum die Beiträge. Da mich diese Technik sehr interessiert, habe ich mich dazu entschlossen eine Mega2560 Board +LCD Display (LCD4884)+RTC DS1307 zu kaufen.
Um die Wartezeit zu verkürzen habe ich mich in dieser Zeit ein wenig mit der Programmierung vertraut gemacht. Unter Playground/Languages/Deutsch/Interessante weiterführende Links auf deutsche Seiten/Einsteiger & Fortgeschrittenen Video-Tutorials auf Deutsch, fand ich ein lehrreiches Einsteiger Video.
Ich habe ein elektronisches Grundwissen, aber leider keine Erfahrung mit der Programmierung von Mikrocontrollern. Da mich dieses Thema wie gesagt sehr interessiert, würde ich es mir gerne aneignen.
Nun zu meinem eigentlichen Problem:
Seit ein paar Tagen bin ich nun stolzer Besitzer der o.a. Hardware. Ich habe nun auch praktisch ein paar Einsteiger-Programmierungen erfolgreich durchgeführt.
Nun wollte ich das RTC-Modul (DS1307) testen, um damit weiter meine Erfahrungen auszubauen. Also habe ich das Modul an das Mega2560-Board angeschlossen (Vcc,Grnd,Sda,Scl). Den dazugehörigen Code, in den Libraries-Ordner der Software kopiert und dann den Sketch in das Arduino-Tool geladen. Der Code/Sketch hat 3 Examples (DS1307_Monitor;DS1307_Test;IC2Scanner). Ich kann mit dem Sketch DS1307_Test und dem Serial Monitor die Zeit und das Datum auslesen. Es wird auch pro Zeile eine Sekunde weiter gezählt, nur leider ist eine falsche Zeit und Datum eingestellt.
Meine Frage wäre nun: Wie kann ich dem DS1307 eine neue Zeit/Datum einstellen? Kann man über den Serial Monitor vielleicht Daten Zeit/Datum an den DS1307 senden? Ich habe schon gelesen, daß man die Zeit und das Datum mit einem 10-stelligen Timestamp laden muss, aber wie?
Ich habe auch mal den Sketch DS1307_Monitor geladen, nur sagt mir die Ausgabe am Serial Monitor "DS1307 Monitor (enable Lf/CR, type 'h' for help)" gar nichts und der Sketch IC2Scanner läßt sich nicht ausführen(irgendwelche Meldungen im unteren Teil des Tools). Wozu sind diese Sketche?
Eine andere Frage wäre noch: Wofür sind außer den Sketch-Dateien mit der Endung .pde noch für Dateien mit den Endungen .h oder .cpp?
Es sind viele Fragen, aber ich hoffe es kann mir jemand helfen.
Kann mir(ein Neuling auf diesem Gebiet), eine Lösung für das Problem mitteilen und vielleicht noch ein paar Grundlagen dazu geben.
Anbei der Link zum Sketch/Code: http://www.dfrobot.com/image/data/DFR0151/DS1307%20library%20v1.0(DFRobot).rar
Vielen Dank schon mal.
Gruß Jens :fearful:

Du kannst per Befehl in der void setup Datum und Uhrzeit setzen oder aber
z.B. über Taster und ein LCD-Display per Tastendruck die Uhrzeit im Programm setzen,
das bedarf aber einer Programmierung. (die ich dir ggf. geben kann, ich mache das nämlich so)
Gruß
Bernward

Hallo Bernward, Danke schon mal für die Info. Ein Sketch für beide Möglichkeiten wäre super und auch welche Zusatzdateien .h oder .cpp ich dazu benötigte.
Gruß Jens

Also ich habe nur folgende eingebunden:
#include <DS1307.h>

  RTC.stop();
   RTC.set(DS1307_SEC,0);
   RTC.set(DS1307_MIN,20);
   RTC.set(DS1307_HR,10);
   RTC.set(DS1307_DOW,1);
   RTC.set(DS1307_DATE,8);
   RTC.set(DS1307_MTH,6);
   RTC.set(DS1307_YR,12);
   RTC.start();

So sollte die Uhr auf den 08.06.2012, 10:20:00 gesetzt werden

Hallo Bernward,
soll der Script unter der void Setup in der .pde Datei mit eingebunden werden?
Was meinst du mit "#include <DS1307.h>"?
Gruß Jens

Ja das gehört in die void setup.
Das #include <DS1307.h> bedeutet, da werden vorgefertigte Scripte eingebunden.
Die sollten eigentlich im Arduino Ordner unter "libraries" vorhanden sein,
da sollte ein Ordner DS1307 zu finden sein.

Hi,
ich klink mich mal kurz mit ein, ich habe hier die "DS1307RTC.h" ist das die selbe wie Eure ("DS1307.h") ?
Wenn nicht, wo bekomm ich Eure her ? Kann mir die jemand per PM schicken ?

Danke und Grüße aus LG

ich schick sie dir!

ich habe es hin bekommen.
Es war in der void setup (DS1307_Test) mit eingebunden. Allerdings musste ich noch zwei Werte ändern, damit er die neue Zeit und das Datum neu setzt.
Den Wert in der Zeile " RTC.getRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));" von 54 auf 55 ändern und den Wert in der Zeile "RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));" von 54 auf 5 ändern. Dann wird wie in dem u.a. Sketch das Datum und die Zeit auf 06.09.2012 02:14:00 gesetzt. Aber warum das so ist, kann ich nicht sagen, vielleicht hat einer eine Erklärung dafür.

Wie bekomme ich nun eigentlich das Datum und die Zeit anstelle des Serial Monitors, auf ein LCD-Display angezeigt?
Was für Befehle bzw. Befehlsfolgen brauche ich dafür?
Gruß Jens

[quote]
[color=#7E7E7E]// #############################################################################[/color]
[color=#7E7E7E]// #[/color]
[color=#7E7E7E]// # Scriptname : DS1307_Test.pde[/color]
[color=#7E7E7E]// # Author     : Peter Schmelzer, Oliver Kraus[/color]
[color=#7E7E7E]// # Date       : 2011-04-08[/color]

[color=#7E7E7E]// # Editor     : Lauren from DFRobot[/color]
[color=#7E7E7E]// # Date       : 30.12.2011[/color]

[color=#7E7E7E]// # Description:[/color]
[color=#7E7E7E]// # Test file for the DS1307new library. Assumes that you have a DS1307 [/color]
[color=#7E7E7E]// # connected to the I2C-Bus of your Arduino and that it has a battery backup.[/color]
[color=#7E7E7E]// # Update the library and sketch to compatible with IDE V1.0 and earlier[/color]

[color=#7E7E7E]// # Version    : 1.0[/color]
[color=#7E7E7E]// #############################################################################[/color]
[color=#7E7E7E]// *********************************************[/color]
[color=#7E7E7E]// INCLUDE[/color]
[color=#7E7E7E]// *********************************************[/color]
#include <[color=#CC6600]Wire[/color].h>                       [color=#7E7E7E]// For some strange reasons, Wire.h must be included here[/color]
#include <[color=#CC6600]DS1307new[/color].h>

[color=#7E7E7E]// *********************************************[/color]
[color=#7E7E7E]// DEFINE[/color]
[color=#7E7E7E]// *********************************************[/color]

[color=#7E7E7E]// *********************************************[/color]
[color=#7E7E7E]// VARIABLES[/color]
[color=#7E7E7E]// *********************************************[/color]
uint16_t startAddr = 0x0000;            [color=#7E7E7E]// Start address to store in the NV-RAM[/color]
uint16_t lastAddr;                      [color=#7E7E7E]// new address for storing in NV-RAM[/color]
uint16_t TimeIsSet = 0xaa55;            [color=#7E7E7E]// Helper that time must not set again[/color]

[color=#7E7E7E]// *********************************************[/color]
[color=#7E7E7E]// SETUP[/color]
[color=#7E7E7E]// *********************************************[/color]
[color=#CC6600]void[/color] [color=#CC6600][b]setup[/b][/color]()
{
  [color=#CC6600]pinMode[/color](2, [color=#006699]INPUT[/color]);                    [color=#7E7E7E]// Test of the SQW pin, D2 = INPUT[/color]
  [color=#CC6600]digitalWrite[/color](2, [color=#006699]HIGH[/color]);                [color=#7E7E7E]// Test of the SQW pin, D2 = Pullup on[/color]

  [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]begin[/color](9600);

[color=#7E7E7E]/*[/color]
[color=#7E7E7E]   PLEASE NOTICE: WE HAVE MADE AN ADDRESS SHIFT FOR THE NV-RAM!!![/color]
[color=#7E7E7E]                  NV-RAM ADDRESS 0x08 HAS TO ADDRESSED WITH ADDRESS 0x00=0[/color]
[color=#7E7E7E]                  TO AVOID OVERWRITING THE CLOCK REGISTERS IN CASE OF[/color]
[color=#7E7E7E]                  ERRORS IN YOUR CODE. SO THE LAST ADDRESS IS 0x38=56![/color]
[color=#7E7E7E]*/[/color]
  RTC.[color=#CC6600]setRAM[/color](0, (uint8_t *)&startAddr, sizeof(uint16_t));[color=#7E7E7E]// Store startAddr in NV-RAM address 0x08 [/color]

[color=#7E7E7E]/*[/color]
[color=#7E7E7E]   Uncomment the next 2 lines if you want to SET the clock[/color]
[color=#7E7E7E]   Comment them out if the clock is set.[/color]
[color=#7E7E7E]   DON'T ASK ME WHY: YOU MUST UPLOAD THE CODE TWICE TO LET HIM WORK[/color]
[color=#7E7E7E]   AFTER SETTING THE CLOCK ONCE.[/color]
[color=#7E7E7E]*/[/color]
[color=#7E7E7E]//  TimeIsSet = 0xffff;[/color]
[color=#7E7E7E]//  RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));  [/color]

[color=#7E7E7E]/*[/color]
[color=#7E7E7E]  Control the clock.[/color]
[color=#7E7E7E]  Clock will only be set if NV-RAM Address does not contain 0xaa.[/color]
[color=#7E7E7E]  DS1307 should have a battery backup.[/color]
[color=#7E7E7E]*/[/color]
  RTC.[color=#CC6600]getRAM[/color]([color=yellow]55[/color], (uint8_t *)&TimeIsSet, sizeof(uint16_t));
  [color=#CC6600]if[/color] (TimeIsSet != 0xaa55)
  {
    RTC.[color=#CC6600]stopClock[/color]();
        
    RTC.[color=#CC6600]fillByYMD[/color]([color=yellow]2012,6,9[/color]);
    RTC.[color=#CC6600]fillByHMS[/color]([color=yellow]02,14,0[/color]);
    
    RTC.[color=#CC6600]setTime[/color]();
    TimeIsSet = 0xaa55;
    RTC.[color=#CC6600]setRAM[/color]([color=yellow]5[/color], (uint8_t *)&TimeIsSet, sizeof(uint16_t));
    RTC.[color=#CC6600]startClock[/color]();
  }
  [color=#CC6600]else[/color]
  {
    RTC.[color=#CC6600]getTime[/color]();
  }

[color=#7E7E7E]/*[/color]
[color=#7E7E7E]   Control Register for SQW pin which can be used as an interrupt.[/color]
[color=#7E7E7E]*/[/color]
  RTC.[color=#CC6600]ctrl[/color] = 0x00;                      [color=#7E7E7E]// 0x00=disable SQW pin, 0x10=1Hz,[/color]
                                        [color=#7E7E7E]// 0x11=4096Hz, 0x12=8192Hz, 0x13=32768Hz[/color]
  RTC.[color=#CC6600]setCTRL[/color]();

  [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color]([color=#006699]"DS1307 Testsketch"[/color]);
  [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color]([color=#006699]"Format is \"hh:mm:ss dd-mm-yyyy DDD\""[/color]);

  uint8_t MESZ;

  MESZ = RTC.[color=#CC6600]isMEZSummerTime[/color]();
  [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color]([color=#006699]"MEZ=0, MESZ=1 : "[/color]);
  [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color](MESZ, [color=#006699]DEC[/color]);    
  [color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color]();
}
.....

ich bin es nochmal.
Der Ausschnitt aus dem Sketch war nicht korrekt übertragen.
Anbei ein neuer Ausschnitt:

// INCLUDE
// *********************************************
#include <Wire.h>                       // For some strange reasons, Wire.h must be included here
#include <DS1307new.h>

// *********************************************
// DEFINE
// *********************************************

// *********************************************
// VARIABLES
// *********************************************
uint16_t startAddr = 0x0000;            // Start address to store in the NV-RAM
uint16_t lastAddr;                      // new address for storing in NV-RAM
uint16_t TimeIsSet = 0xaa55;            // Helper that time must not set again

// *********************************************
// SETUP
// *********************************************
void setup()
{
  pinMode(2, INPUT);                    // Test of the SQW pin, D2 = INPUT
  digitalWrite(2, HIGH);                // Test of the SQW pin, D2 = Pullup on

  Serial.begin(9600);

/*
   PLEASE NOTICE: WE HAVE MADE AN ADDRESS SHIFT FOR THE NV-RAM!!!
                  NV-RAM ADDRESS 0x08 HAS TO ADDRESSED WITH ADDRESS 0x00=0
                  TO AVOID OVERWRITING THE CLOCK REGISTERS IN CASE OF
                  ERRORS IN YOUR CODE. SO THE LAST ADDRESS IS 0x38=56!
*/
  RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));// Store startAddr in NV-RAM address 0x08 

/*
   Uncomment the next 2 lines if you want to SET the clock
   Comment them out if the clock is set.
   DON'T ASK ME WHY: YOU MUST UPLOAD THE CODE TWICE TO LET HIM WORK
   AFTER SETTING THE CLOCK ONCE.
*/
//  TimeIsSet = 0xffff;
//  RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));  

/*
  Control the clock.
  Clock will only be set if NV-RAM Address does not contain 0xaa.
  DS1307 should have a battery backup.
*/
  RTC.getRAM(55, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
  if (TimeIsSet != 0xaa55)
  {
    RTC.stopClock();
        
    RTC.fillByYMD(2012,6,9);
    RTC.fillByHMS(02,14,0);
    
    RTC.setTime();
    TimeIsSet = 0xaa55;
    RTC.setRAM(5, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
    RTC.startClock();
  }
  else
  {
    RTC.getTime();
  }

Wie bekomme ich nun eigentlich das Datum und die Zeit anstelle des Serial Monitors, auf ein LCD-Display angezeigt?
Was für Befehle bzw. Befehlsfolgen brauche ich dafür?

Schau dir die LiquidCrystal Beispiele an, das hat nichts mit DS1307 und Uhrzeit zu tun, sondern handelt von normalem Text.
Statt Serial.print() mit lcd.print() und entsprechender Initialisierung, vorher.

Hallo Zusammen

Ich wollte mich kurz (als einer der Autoren der eingangs erwähnten Lib) melden.

Die Lib befindet sich hier: Google Code Archive - Long-term storage for Google Code Project Hosting.

Die Anleitung hier: Google Code Archive - Long-term storage for Google Code Project Hosting.

Ich habe auch mal den Sketch DS1307_Monitor geladen, nur sagt mir die Ausgabe am Serial Monitor "DS1307 Monitor (enable Lf/CR, type 'h' for help)" gar nichts

In der Tat ist dieser Sketch mehr als nur ein einfaches Beispiel, sondern man kann über den Befehl
s yyyy-mm-dd hh:mm:ss
Datum und Uhrzeit über den Serial Monitor einstellen. Wenn man also die aktuelle Uhrzeit einstellen will, dann wäre dies:
s 2012-06-10 19:40:00

Was das LCD betrifft, wäre es auch denkbar M2TKLIB (Google Code Archive - Long-term storage for Google Code Project Hosting.) zu verwenden. Mit Hilfe von M2TKLIB können Dialogboxen zur Eingabe von Informationen (hier von Datum und Uhrzeit) programmiert werden. Beispielsweise wäre hier der Code für die Eingabe der Uhrzeit.

Oliver

/* edit time dialog */

uint8_t td_hour;
uint8_t td_min;
uint8_t td_sec;

void td_get_from_RTC(void)
{
  RTC.getTime();
  td_hour = RTC.hour;
  td_min = RTC.minute;
  td_sec = RTC.second;
}

void td_put_to_RTC(void)
{
  RTC.getTime();
  RTC.fillByHMS(td_hour, td_min, td_sec);
  RTC.setTime();
  RTC.startClock();  
}

void td_ok_fn(m2_el_fnarg_p fnarg) 
{
  td_put_to_RTC();
  m2.setRoot(&el_top);
}

M2_U8NUM(el_td_hour, "c2", 0,23,&td_hour);
M2_LABEL(el_td_sep1, NULL, ":");
M2_U8NUM(el_td_min, "c2", 0,59,&td_min);
M2_LABEL(el_td_sep2, NULL, ":");
M2_U8NUM(el_td_sec, "c2", 0,59,&td_sec);

M2_LIST(list_time) = { &el_td_hour, &el_td_sep1, &el_td_min, &el_td_sep2, &el_td_sec };
M2_HLIST(el_time, NULL, list_time);

M2_ROOT(el_td_cancel, NULL, "cancel", &el_top);
M2_BUTTON(el_td_ok, NULL, "ok", td_ok_fn);
M2_LIST(list_td_buttons) = {&el_td_cancel, &el_td_ok };
M2_HLIST(el_td_buttons, NULL, list_td_buttons);

M2_LIST(list_td) = {&el_time, &el_td_buttons };
M2_VLIST(el_top_td, NULL, list_td);

Danke schon mal für die Infos.
Ich habe nun das Problem mit der Uhrzeit und dem Datum dank der Hilfe hier im Forum gelöst.
Nun habe ich eine neue Frage, bei der ich nicht weis ob ich dafür einen neuen Beitrag erstellen muß/soll oder ob ich hier einfach weiter meine Fragen stellen soll :~
Die Frage hat allerdings auch mit dem DS1307 zu tun.
Ich stelle diese einfach mal und hoffe, dass mir einer behilflich sein kann.
Ich schalte zur einer bestimmten Uhrzeit den Ausgang Pin 13 mit einer angeschlossenen LED auf High und 15 sec. später wieder auf Low. Nach einer weiteren 1 min.+15 sec. wieder auf High. Nun bleibt der Ausgang bis zum nächsten Durchlauf in ca. 23 Stunden +ein paar zerhackte auf High. Trenne ich aber in der Zeit die Stromversorgung des Arduino und verbinde die Stromversorgung wieder bleibt der Ausgang auf Low.
Speichert der Arduino den letzten Zustand des Ausgangs nicht oder muss ich etwas in dem Sketch ändern?
Gruß Jens

  if (RTC.get(DS1307_HR, false) == 1 && 
      RTC.get(DS1307_MIN, false) == 50 && 
      RTC.get(DS1307_SEC, false) == 15){
     digitalWrite (13, HIGH);
     digitalWrite (9, LOW);
  }
  if (RTC.get(DS1307_HR, false) == 1 && 
      RTC.get(DS1307_MIN, false) == 50 && 
      RTC.get(DS1307_SEC, false) == 30){
      digitalWrite (13, LOW);
      digitalWrite (9, HIGH);
}
if (RTC.get(DS1307_HR, false) == 1 && 
      RTC.get(DS1307_MIN, false) == 51 && 
      RTC.get(DS1307_SEC, false) == 45){
     digitalWrite (13, HIGH);
     digitalWrite (9, LOW);
}
}

Du wertest ja exakte Zeiten aus, in der ersten if-Anweisung bei 01:50:15. Stell dir vor, du machst ein Reset und der arduino stertet um 01:50:17. Was passiert? Natürlich nichts - weil ja die Bedingung nicht erfüllt ist. Die if-Anweisungen müssen folglich umgestellt werden, dass es nach oder gleich 01:50:15 und noch vor 01:50:30.

moin moin aus dem Norden,
ich versuche nun schon seit einigen Tagen eine Lösung für mein Problem zu finden. Ich möchte die Uhrzeit/Datum aus dem Serial Monitor auf meinem Display zur Anzeige zu bringen. Es handelt sich um folgendes Display: http://tronixstuff.wordpress.com/2011/03/12/the-dfrobot-lcd4884-lcd-shield/.
michael_x hatte geschrieben:

Schau dir die LiquidCrystal Beispiele an, das hat nichts mit DS1307 und Uhrzeit zu tun, sondern handelt von normalem Text.
Statt Serial.print() mit lcd.print() und entsprechender Initialisierung, vorher.

Muß man alle "Serial" mit dem Wort "lcd" austauschen und was ist mit einer Initialisierung gemeint?
Ich habe ein paar Beispiel-Sketche mit dem Display ausprobiert und habe Texte in verschiedenen Zeilen/Spalten geschrieben und es hat funktioniert, nur leider komme ich nicht auf den Dreh, wie das mit der Uhrzeit/Datum funktionieren soll.
Ich habe mal einen Sketch für einen Text auf dem Display mit angehängt.
Gruß Jens

/*
  &object:Ultrasonic Ranging and display the distance in LCD4884
  &LCD4884 connections Specification:
    Power Supply: 5V
    SPI Interface (using Arduino Digital Pin 2,3,4,5,6)
    One Reset button
    Backlit control (Arduino DIO Pin 7) 
	for more detial see the picture  
	
 &Ultrasonic connection Specification:
 *Vcc pin to  +5
 *Trig pin to digital pin 12
 *Echo pin to digital pin 13
 fuction of this exampla :get the distance  data from HCS-RO4 and display in LCD4884
							Any suggestions are welcome.upload the code to Arduino and you will see 	"Dis_CM:0XX"
			notice :if you before you try to call lcd.LCD_write_string to display a value ,you should read  "LCD4884.ccp first"
		E-mail:support@sainsmart.com
 */
#include <LiquidCrystal.h>

#include "LCD4884.h"y
#include "SainSmart.h"
#include "SainSmart_chinese.h"



void setup()
{

  
  //confign 4884
  lcd.LCD_init();
  lcd.LCD_clear();
  lcd.backlight(ON);//Turn on the backlight

  //lcd.backlight(OFF); // Turn off the backlight  
}


/* loop */

void loop()
{
  SainSmart();
}

/* menu functions */
// waiting for center key press



void SainSmart(){
 
  
 // nomber_s[4]=char(123);
  lcd.LCD_write_string( 3, 2, "Hallo brauche", MENU_NORMAL);
  lcd.LCD_write_string(10, 5, "Hilfe :-)", MENU_HIGHLIGHT );
  //waitfor_OKkey();


}

Tschuldigung, ich hatte vorausgesetzt, du hättest schon die aktuelle RTC Uhrzeit auf dem Serial Monitor angezeigt, und willst diese Anzeige jetzt auf dein LCD Display bringen.

#include <Wire.h>
#include <RTClib.h>

RTC_DS1307 RTC; // kann sein, dass das bei deiner RTC library anders geht ...
DateTime now;


const char LOGFORMAT[] = "%02u.%02u.%04u %02u:%02u:%02u";

void loop()  {
    now=RTC.now(); // kann sein, dass das bei deiner RTC library anders geht ...
...
    static char dataString[20]; 
    sprintf(dataString, LOGFORMAT,
       now.day(), now.month(), now.year(),now.hour(),now.minute(),now.second() );

    Serial.println(dataString); // Oder statt dessen  auf's LCD
...  
}

danke michael_x,
für mich ist es als Neuling noch sehr schwierig alles zu verstehen. Ich habe mir mittlerweile auch ein Buch bestellt "Arduino Praxiseinstieg" von Thomas Brühlmann um das alles besser zu erlernen.
Nun aber wieder zur Materie zurück: Ich habe im Post #14 (1Seite) ein Sketch mit angefügt, der mir für mein Display Texte im Display anzeigt. Schreibe ich da nun den Code rein, wie du ihn geschrieben hast? Also praktisch die #include.... vor der void setup; RTC_DS1307 RTC...DateTime...const char... in die void setup und die void loop Daten natürlich in die void loop oder? Vielleicht kannst du es ja einmal da mit einbauen (wenn es da überhaupt rein gehört), damit ich es verstehen kann wie so etwas aufgebaut ist.

Serial.println(dataString); // Oder statt dessen auf's LCD

Ist damit gemeint, dass ich anstelle von Serial.print lcd.print ersetzen muß?

RTC_DS1307 RTC; // kann sein, dass das bei deiner RTC library anders geht ...

[quote now=RTC.now(); // kann sein, dass das bei deiner RTC library anders geht ...][/quote]

Ich habe eine DS1307.h, ist das eine library und wofür sind die?

Gruß Jens

now=RTC.now(); // kann sein, dass das bei deiner RTC library anders geht ...]

Ich habe eine DS1307.h, ist das eine library und wofür sind die?

"xyz.h" sind die sog. include - Dateien, in denen die Funktionsdeklarationen stehen.
Eine library hat in der Regel noch eine "xyz.cpp" Datei dazu, wo der eigentliche Programmcode der library drin steht.
( Im Prinzip das gleiche wie in deiner .ino Datei, kannst du dir anschauen und auch ändern, wenn du was zu verbessern findest )

Dem Namen nach ist DS1307.h wohl auch eine Library für den DS3107 Baustein. Im Examples Verzeichnis findest du dann passenden Beispielcode zum Verstehen lernen und kopieren.
( Ich nehm GitHub - adafruit/RTClib: A fork of Jeelab's fantastic RTC Arduino library, aber im Endeffekt geben die sich wohl nicht viel, da sie die Daten vom gleichen Baustein über die gleiche Schnittstelle <Wire.h> kriegen. )

Das gleiche gilt für die LCD library. Da verwendest du auch eine andere als ich (LiquidCrystal - Arduino Reference), daher sind im Einzelfall evtl. unterschiedliche Funktionsaufrufe zu parametrieren. Aber ob der anzuzeigende Text nun "Hallo" oder "12:30:40" ist, ist der LCD library egal. (Selbst dass man den ersten nicht so oft neu schreiben muss, ist der library egal. Das ist deine Sache).

lcd.LCD_write_string(10, 5, "Hilfe :-)", MENU_HIGHLIGHT );  wird dann wohl

lcd.LCD_write_string(10, 5, dataString, MENU_HIGHLIGHT );

..., wenn ich mal rate, dass 10,5 die Stelle auf dem Display und MENU_HIGHLIGHT eine Farbe oder "Fettigkeit" sein wird.

OK, danke habe ich soweit verstanden. 10,5 + MENU_HIGHLIGHT ist die Position und der Text wird schwarz hinterlegt.

Schreibe ich da nun den Code rein, wie du ihn geschrieben hast? Also praktisch die #include.... vor der void setup; RTC_DS1307 RTC...DateTime...const char... in die void setup und die void loop Daten natürlich in die void loop oder?

Aber es bleibt immer noch die Frage mit den anderen Befehlen #unclude... von dem RTC. Müssen diese mit in den Sketch von dem Display-Sketch?
Gruß Jens

Ich habe mal versucht es in den Sketch einzubauen.

/*
  &object:Ultrasonic Ranging and display the distance in LCD4884
  &LCD4884 connections Specification:
    Power Supply: 5V
    SPI Interface (using Arduino Digital Pin 2,3,4,5,6)
    One Reset button
    Backlit control (Arduino DIO Pin 7) 
	for more detial see the picture  
	
 &Ultrasonic connection Specification:
 *Vcc pin to  +5
 *Trig pin to digital pin 12
 *Echo pin to digital pin 13
 fuction of this exampla :get the distance  data from HCS-RO4 and display in LCD4884
							Any suggestions are welcome.upload the code to Arduino and you will see 	"Dis_CM:0XX"
			notice :if you before you try to call lcd.LCD_write_string to display a value ,you should read  "LCD4884.ccp first"
		E-mail:support@sainsmart.com
 */
#include <LiquidCrystal.h>

#include "LCD4884.h"y
#include "SainSmart.h"
#include "SainSmart_chinese.h"
#include <Wire.h>
#include <RTClib.h>


void setup()
{

  
  //confign 4884
  lcd.LCD_init();
  lcd.LCD_clear();
  lcd.backlight(ON);//Turn on the backlight

  //lcd.backlight(OFF); // Turn off the backlight  

  RTC_DS1307 RTC; // kann sein, dass das bei deiner RTC library anders geht ...
DateTime now;
const char LOGFORMAT[] = "%02u.%02u.%04u %02u:%02u:%02u";

 }


/* loop */

void loop()
{
  SainSmart();
  now=RTC.now(); // kann sein, dass das bei deiner RTC library anders geht ...
static char dataString[20]; 
    sprintf(dataString, LOGFORMAT,
       now.day(), now.month(), now.year(),now.hour(),now.minute(),now.second() );
}

/* menu functions */
// waiting for center key press



void SainSmart(){
 
  
 // nomber_s[4]=char(123);
  lcd.LCD_write_string(10, 5, dataString, MENU_HIGHLIGHT );
  //waitfor_OKkey();


}

Doch irgendwie will es nicht und es kommt zu einer Fehlermeldung "RTC_DS1307' was not declared in this scope"

RTC.jpg