Ako doplniť String pre OLED

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

boro
Stály člen
Stály člen
Príspevky: 118
Dátum registrácie: 10 Nov 2010, 00:00
Vek: 80

Ako doplniť String pre OLED

Príspevok od používateľa boro » 29 Mar 2020, 14:52

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();

}
0

popopepe
Stály člen
Stály člen
Príspevky: 404
Dátum registrácie: 22 Jún 2009, 00:00

Re: Ako doplniť String pre OLED

Príspevok od používateľa popopepe » 29 Mar 2020, 21:55

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.
0

boro
Stály člen
Stály člen
Príspevky: 118
Dátum registrácie: 10 Nov 2010, 00:00
Vek: 80

Re: Ako doplniť String pre OLED

Príspevok od používateľa boro » 02 Apr 2020, 17:58

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();
0

popopepe
Stály člen
Stály člen
Príspevky: 404
Dátum registrácie: 22 Jún 2009, 00:00

Re: Ako doplniť String pre OLED

Príspevok od používateľa popopepe » 02 Apr 2020, 19:02

No vidíš, dodnes jsem netušil, že taková funkce přímo vůbec existuje :-)
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok