Dobrý deň,pokúšam sa doplniť program:Getting Date&Time From NTP Server with ESP32 s výpisom údajov na OLED.Funguje to,len neviem dostať údaje do String (tam kde sú otázniky).Prikladám aj celý skeč.Vie mi niekto prosím poradiť?
Ďakujem
#include<Wire.h>
#include<SSD1306.h>
SSD1306 display(0x3C,21,22);
#include <WiFi.h>
#include "time.h"
const char* ssid = "HUA";
const char* password = "f"
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 0;
const int daylightOffset_sec = 7200;
void printLocalTime()
{
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}
void setup()
{
Serial.begin(115200);
//connect to WiFi
Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" CONNECTED");
//init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
//disconnect WiFi as it's no longer needed
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void loop()
{
delay(1000);
printLocalTime();
display.init();
display.drawString(0,0, String(??????????????????));
display.display();
}
Ako doplniť String pre OLED
Moderátor: Moderátori
Re: Ako doplniť String pre OLED
Ber to jako pokus.
Protože máš ty údaje v nějaké struktuře (struct tm timeinfo;) a netuším, jak je to tam uložené, tak asi nejjednodušší bude pomocí funkce sprintf.
Ale otázka je, co je v té struktuře tm.
Udělej si nějaký buffer a přidej knihovnu stdio.h
#include <stdio.h>
char muj_buff[50];
//do setup doplň
display.init();
//a v loop()
delay(1000);
printLocalTime();
//musíš doplnit za ty dva otazníky ty dvě proměnné z té struktury, nebo je smaž, ale nebudou se zobrazovat
//sprintf(buffer,"%A, %B %d %Y %H:%M:%S", timeinfo.Day,timeinfo.Year,timeinfo.Hour,timeinfo.Minute,timeinfo.Second);
sprintf(buffer,"%A, %B %d %Y %H:%M:%S", timeinfo.?,timeinfo.?,timeinfo.Day,timeinfo.Year,timeinfo.Hour,timeinfo.Minute,timeinfo.Second);
display.drawString(0,0, String(muj_buff));
display.display();
memset (muj_buf,'0',50); //smaže obsah toho bufferu
Jukni do time.cpp, jak je tam ta struktura nadefinovaná.
A pak mrkni do toho muj_buff, co tam bude.
Co znamenají ty dva první znaky při tom výpisu? (%A, %B)? Předpokládám, že d bude den, Y bude rok, HMS hodina minuta sekunda.
zkopíruj sem výpis toho Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
PS: display.init asi nepatří do main loopu, ale spíš do setup. Tyhle knihovní slepence jsou strašný...
Ale ber to jenom jako nástřel, netuším, co je v těch knihovnách. Arduino už nepoužívám.
Protože máš ty údaje v nějaké struktuře (struct tm timeinfo;) a netuším, jak je to tam uložené, tak asi nejjednodušší bude pomocí funkce sprintf.
Ale otázka je, co je v té struktuře tm.
Udělej si nějaký buffer a přidej knihovnu stdio.h
#include <stdio.h>
char muj_buff[50];
//do setup doplň
display.init();
//a v loop()
delay(1000);
printLocalTime();
//musíš doplnit za ty dva otazníky ty dvě proměnné z té struktury, nebo je smaž, ale nebudou se zobrazovat
//sprintf(buffer,"%A, %B %d %Y %H:%M:%S", timeinfo.Day,timeinfo.Year,timeinfo.Hour,timeinfo.Minute,timeinfo.Second);
sprintf(buffer,"%A, %B %d %Y %H:%M:%S", timeinfo.?,timeinfo.?,timeinfo.Day,timeinfo.Year,timeinfo.Hour,timeinfo.Minute,timeinfo.Second);
display.drawString(0,0, String(muj_buff));
display.display();
memset (muj_buf,'0',50); //smaže obsah toho bufferu
Jukni do time.cpp, jak je tam ta struktura nadefinovaná.
A pak mrkni do toho muj_buff, co tam bude.
Co znamenají ty dva první znaky při tom výpisu? (%A, %B)? Předpokládám, že d bude den, Y bude rok, HMS hodina minuta sekunda.
zkopíruj sem výpis toho Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
PS: display.init asi nepatří do main loopu, ale spíš do setup. Tyhle knihovní slepence jsou strašný...
Ale ber to jenom jako nástřel, netuším, co je v těch knihovnách. Arduino už nepoužívám.
0
Re: Ako doplniť String pre OLED
Zdravím a ďakujem za odpoveď.Našiel som jednoduchšie riešenie.Uvediem príklad na výpis hodín:
display.init();
char hod [3];
strftime(hod,3,"%H.",&timeinfo);
display.drawString(x,y,String(hod));
.
.
.
display.display();
display.init();
char hod [3];
strftime(hod,3,"%H.",&timeinfo);
display.drawString(x,y,String(hod));
.
.
.
display.display();
0
Re: Ako doplniť String pre OLED
No vidíš, dodnes jsem netušil, že taková funkce přímo vůbec existuje
0
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 1 Odpovedí
- 1343 Zobrazení
-
Posledný príspevok od používateľa Ado_PO
-
- 0 Odpovedí
- 399 Zobrazení
-
Posledný príspevok od používateľa lato
-
- 17 Odpovedí
- 1850 Zobrazení
-
Posledný príspevok od používateľa kapor
-
- 13 Odpovedí
- 1654 Zobrazení
-
Posledný príspevok od používateľa hal_sk
-
- 6 Odpovedí
- 1006 Zobrazení
-
Posledný príspevok od používateľa milan209