schwierigkeiten mit ausgabe der Uhzreit auf LCD

Hallo Freunde

Ich habe meine Pillenbox soweit fertig und auch die LCD Azeige läuft. Ich habe aber schwierigkeiten um die Uhreit aus u geben auf der LCD. Und zwar lese ich die Uhrzeit beim Hochfahren des Programms mit

char time[]=__TIME__;
int stunden,minuten,sekunden;

char datum[]=__DATE__;
int tage,monate,jahre;

  stunden=atoi(time);
  minuten=atoi(&time[3]);
  sekunden=atoi(&time[6]);
  tage=atoi(&datum[4]);
  jahre=atoi(&datum[8]);
 monate=2;

aus und möchte nun die einelnen Werte wie : Stunden, minuten, sekunden in einem String zusammen fügen das es auf der LCD folgender massen aussieht: 20:45:30 10/02/14 wie bekomme ich die einelnen Werte in einem string so zusamen gestellt. so das ich sie auf der LCD mit mylcd.print( Uhr Datum ) ausgeben kann.

Versteh immer noch nicht, warum du nicht einfach die RTC Lib nimmst :wink: Die Ressourcen sollten dein Arduino locker überhaben.

Was gibt dir Stunden, Minuten derzeit alles aus?

1.) Das gibt dir Uhrzeit aus wann das Programm kompiliert wurde. Nicht wenn es hochfährt. Woher soll der Controller die Zeit wissen? Du brauchst dazu eine Echtzeit-Uhr oder Zugriff auf einen NTP Server.

Wenn du die Zeit ohne Uhr lokal zählen willst, verwende die Time Lib:
http://www.pjrc.com/teensy/td_libs_Time.html
Die driftet natürlich irgendwann ab, da der Takt ungenau ist.

2.)

const int STRING_BUFFER_SIZE = 9;
char stringBuffer[STRING_BUFFER_SIZE];

char* getTimeStr()
{
	sprintf_P(stringBuffer, PSTR("%02d:%02d:%02d"), hour(), minute(), second());
	return stringBuffer;
}

char* getDateStr()
{
	sprintf_P(stringBuffer, PSTR("%02d/%02d/%02d"), day(), month(), year() % 100);
	return stringBuffer;
}

Hier mit Methoden über die Time Lib. Aber das Prinzip ist das gleiche wenn du die Zeit woanders her hast (z.B direkt von einer RTC). year() ist da vierstellig. Daher %100. Kann man je nach Format anpassen.

Die _P Version von sprintf() sorgt dafür, dass der Format String im Flash bleibt. Das spart etwas RAM.

Das liefert dir einen Zeiger auf das Array, so dass man die Methode direkt in anderen Methoden einsetzen kann:

mylcd.print(getTimeStr());

Ja Stefan ich habe ja noch eine RTC hier irgendwo rum liegen. aber meine Uhren laufen so schön ohne :)

@ Serenifly bei deinem geposteten Code bekomme ich immer folgende fehlermeldung.... Pillenbox:20: error: 'PSTR' was not declared in this scope

Mhh, probier mal das:
#include <avr/pgmspace.h>

In dem Header ist das Makro definiert. Obwohl ich das bei mir komischerweise nicht habe.

Und wie gesagt die Parameter von sprintf() anpassen.

EDIT:
Bei mir ist das indirekt über die UTFT Lib inkludiert. Daher muss ich es nicht extra machen

Danke Serenifly

Jetzt läuft es :)

So habe jetzt alles soweit am laufen, was ich nicht verstehe ist ich kann die liquitCristal.H nur mit der IDE 022 verwenden, bei den höheren IDEs bekomme ich immer Fehlermeldungen das Delay() nicht deklariert sei und _digitalWrite nicht . Das wäre ja nicht so schlimm, nur bei der **IDE 022** kann ich die **FastSPI_LED2.h** nicht verwenden. Was muss ich anstellen das die Libs mit der IDE 1.0.5 oder höher funst.