Oled- Display

Mehr
11 Mär 2021 19:26 #748 von Greenhouse
Oled- Display
Hallo Havefun_2,

Deine Lösung deutet daraf hin, daß die drawStr Funktion den Text als Pointer erwartet.

Das würde auch das & Zeichen in der Fehlermeldung erklären.

u8g2.drawStr(0,40, &formTime);

wäre mal ein Versuch wert.

Wenn Du Dich unbeobachtet fühlst, kannst Du natürlich auch einmal in die .h Datei der u8g2 Bibliothek schauen und die Definition suchen. :-)

Gruß Greenhouse

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
11 Mär 2021 21:39 #749 von Havefun_2
Oled- Display
???
In einer Fehlermeldung sah ich, daß der Wochentag als Char-Array übergeben wurde.
Dieser wurde akzeptiert und dargestellt.
Daher die Vorgehensweise, Alles in ein Char-Array zu wandeln.
Das mit dem Pointer und der Bibliothek ist mir zu hoch.
Durch Visual Studio und Visual C# bin etwas verwöhnt und zufrieden das es mit dieser seltsamen Arduino IDE
irgendwie funktioniert.
Trotzdem danke und bis dann.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
15 Mär 2021 11:39 #752 von Havefun_2
Oled- Display
Hallo,
die Zeit und der Wochentag werden korrekt auf dem Display angezeigt
(Code s. Anhang).
Nun will ich auch noch das Datum zufügen.
Alle Versuche meinerseits endeten mit den unterschiedlichsten Fehlermeldungen.
Hat jemand eine anfängertaugliche Lösung parat ?
Danke
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
16 Mär 2021 20:50 #753 von Greenhouse
Oled- Display
Hallo Havefun_2,

hier ein Sketch als Beispiel für die Konvertierung eines Zeit/Datumswertes in einen String.


// -------------------------------------------------
// diesen Teil in Deinen Programmcode einbinden

#include <string>
#include <time.h>

std::string StrDate(time_t timestamp)
{
	std::string result;						// Ergebnisvariable
	char buffer[sizeof(long) * 8 + 1];		// Puffer für die Funktion itoa mit der maximal für eine long Zahl erforderlichen Stellenzahl definieren
	struct tm timeinfo;						// Struktur zur Aufnahme der Zeitinformation 


	if (timestamp == 0)						// falls keine Zeit übergeben wurde, wird die aktuelle Uhrzeit des Systems gelesen
	{
		time(&timestamp);

		// Set timezone to Berlin Time
		setenv("TZ", "CST-1", 1);
		tzset();

	}
	
	localtime_r(&timestamp, &timeinfo);				// Inhalt der long Variablen timestamp in die Struktur timeinfo überführen

	itoa(timeinfo.tm_mday + 100, buffer, 10);						// um die Zahlen jeweils 2 stellig zu erhalten, wird der Wert 100 addiert und anschließend 
																	// der resultierende String ab der 2. Stelle verwendet [.substr(1, 2)]
	result = std::string(buffer).substr(1, 2) + ".";
	itoa(timeinfo.tm_mon + 1 + 100, buffer, 10);				// 1 hinzufügen, um den korrekten Monat zu erhalten, 100 um 2 Stellen zu erreichen
	result += std::string(buffer).substr(1, 2) + ".";
	itoa(timeinfo.tm_year + 1900, buffer, 10);					// + 1900, um den Start der Zeitzählung festzulegen
	result += std::string(buffer);

	return (result);
}   //  StrDate

std::string   StrTime(time_t timestamp)
{
	std::string result;						// Ergebnisvariable
	char buffer[sizeof(long) * 8 + 1];		// Puffer für die Funktion itoa mit der maximal für eine long Zahl erforderlichen Stellenzahl definieren
	struct tm timeinfo;						// Struktur zur Aufnahme der Zeitinformation 

	if (timestamp == 0)			// falls keine Zeit übergeben wurde, wird die aktuelle Uhrzeit des Systems gelesen
	{
		time(&timestamp);

		// Set timezone to Berlin Time
		setenv("TZ", "CST-1", 1);		
		tzset();
	}
	

	localtime_r(&timestamp, &timeinfo);		// Inhalt der long Variablen timestamp in die Struktur timeinfo überführen

	
	result = "";
	itoa(timeinfo.tm_hour + 100, buffer, 10);						// um die Zahlen jeweils 2 stellig zu erhalten, wird der Wert 100 addiert und anschließend 
																	// der resultierende String ab der 2. Stelle verwendet [.substr(1, 2)]
	result += std::string(buffer).substr(1, 2) + ":";
	itoa(timeinfo.tm_min + 100, buffer, 10);
	result += std::string(buffer).substr(1, 2) + ":";
	itoa(timeinfo.tm_sec + 100, buffer, 10);
	result += std::string(buffer).substr(1, 2);

	return (result);
}   //  StrTime


/***
 * StrDateTime liefert das Datum und die Uhrzeit aus der Variablen timestamp als String zurück
 ***/
std::string   StrDateTime(time_t timestamp)
{
	std::string result;

	result =  StrDate(timestamp);			// Datumsteil füllen
	result += " ";							// Leerzeichen zwischen Datum und Zeit
	result +=  StrTime(timestamp);			// Zeitanteil füllen

	return (result);
}   //  StrDateTime

// Ende der Datum/Zeit Funktionen
// -------------------------------------------------

void setup() {
	Serial.begin(115200);

}

// the loop function runs over and over again forever
void loop() {
	std::string output;

	output = StrDateTime(0);				// an Stelle der 0 kann hier die aktuelle Zeit mit Hilfe von (time_t)timeClient.getEpochTime() übergeben werden 
	Serial.println(output.c_str());
	delay(1000);
}

Aus Deiner NTPClient Struktur sollte über die Funktion getEpochTime ein long Wert zurück kommen, der die Zeit Sekunden seit 01.01.1970 enthält.
Der Type time_t ist im Grunde ein long und kann einfach gecasted werden (time_t)timeClient.getEpochTime().

Die Funktion StrDate liefert den Datumsteil als String.
Mit StrTime erhälst Du den Zeitanteil
StrDateTime liefert beide Teile mit einem Leerzeichen getrennt.

Viel Erfolg beim Ausprobieren in Deinem Sketch.

Gruß
Greenhouse

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
17 Mär 2021 10:33 #754 von Havefun_2
Oled- Display
Hallo Greenhouse,
danke für deine Mühe. Ich habe deinen Teil in meinen Code eingefügt. Der ursprüngliche Teil funktioniert. Zeit und Wochentag werden auf dem Oled korrekt angezeigt. Auf dem seriellen Monitor sind wir im Jahr 1970. Vielleicht kannst du erkennen ,was ich falsch gemacht habe.
Gruß,
Havefun
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
17 Mär 2021 12:49 #755 von Havefun_2
Oled- Display
Kleiner Nachtrag: Ich freue mich natürlich über jeden hilfreichen Tip.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Powered by Kunena Forum