Oled- Display
- Greenhouse
- Offline
- Junior Member
Weniger
Mehr
- Beiträge: 25
- Dank erhalten: 11
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
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.
- Havefun_2
- Autor
- Offline
- New Member
Weniger
Mehr
- Beiträge: 11
- Dank erhalten: 0
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.
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.
- Havefun_2
- Autor
- Offline
- New Member
Weniger
Mehr
- Beiträge: 11
- Dank erhalten: 0
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
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
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Greenhouse
- Offline
- Junior Member
Weniger
Mehr
- Beiträge: 25
- Dank erhalten: 11
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.
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
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(×tamp);
// Set timezone to Berlin Time
setenv("TZ", "CST-1", 1);
tzset();
}
localtime_r(×tamp, &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(×tamp);
// Set timezone to Berlin Time
setenv("TZ", "CST-1", 1);
tzset();
}
localtime_r(×tamp, &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.
- Havefun_2
- Autor
- Offline
- New Member
Weniger
Mehr
- Beiträge: 11
- Dank erhalten: 0
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
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
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Havefun_2
- Autor
- Offline
- New Member
Weniger
Mehr
- Beiträge: 11
- Dank erhalten: 0
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.
- Aktuelle Seite:
- Startseite
- Impressum / Datenschutz / ...
- ESP8266 spezifisch
- Programmierumgebung / IDE
- Oled- Display