Pomoc se výkladem kodu

DavidO
Příspěvky: 712
Registrován: 01 kvě 2013, 21:27

Re: Pomoc se výkladem kodu

Příspěvek od DavidO » 29 lis 2018, 17:48

Ale tu knihovnu stejně potřebuješ - odkud by se vzal ten ntpClient?

daton
Příspěvky: 519
Registrován: 16 bře 2013, 16:12

Re: Pomoc se výkladem kodu

Příspěvek od daton » 30 dub 2019, 14:09

Ahoj
zase bych potřeboval trochu poradit s kodem tentokrát je to z této stránky
https://lastminuteengineers.com/esp32-n ... -tutorial/
kdy kod co tam má autor funguje ale když si ho chci přenést do svého projektu a smostatně dosadit hodiny minuty a vteřiny tak mi to vypíše chybu.

Nelíbí se mu toto jako hodiny
%H
zkoušl jsem ho přiřadit ke stringu floatu a dalším typům ale nic asi tako

hodiny = %H,

přitom celkový výraz funguje
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");

Prosím mohl by mi někdo nějak polopatě vysvětlit proč se to zdráhá fungovat? Díky

Uživatelský avatar
fulda
Příspěvky: 749
Registrován: 04 led 2016, 17:18

Re: Pomoc se výkladem kodu

Příspěvek od fulda » 30 dub 2019, 14:56

a jak by poznal, že to jsou hodiny z timeinfo?
Hledáš něco jako: hodiny = sprintf(&timeinfo,"%H")
Za pravopisné chyby v této zprávě může moje učitelka češtiny.

DavidO
Příspěvky: 712
Registrován: 01 kvě 2013, 21:27

Re: Pomoc se výkladem kodu

Příspěvek od DavidO » 30 dub 2019, 15:00

Hádat, jakou chybu máš v kódu když nevidím ten kód je těžký. Sice jsme to s Jendou úspěšně ve Waldkirchu dělali, on programoval, na pozadí spouštěl kompilaci a já z výstupu kompilátoru do vedlejšího okna radil, co má opravit, aniž bych ten kód viděl, ale to bylo v situaci, kdy jsme měli asi dvě minuty na přeprogramování a je to jen omezeně použitelná metoda.

Po rychlopřečtení toho článku se mi to jeví takhle: V tom ukázkovém kódu se čas schovává ve struktuře pojmenované tm, resp. v její instanci v proměnné timeinfo. Funkce println pak vezme tu proměnnou a podle formátu v druhém parametr (ten řetězec s procentama) vypíše čas. Jestli chceš získat nějaký časový údaj pro jiné účely, tak si sáhni rovnou do té proměnné, například hodiny = timeinfo.tm_hour;

daton
Příspěvky: 519
Registrován: 16 bře 2013, 16:12

Re: Pomoc se výkladem kodu

Příspěvek od daton » 30 dub 2019, 21:31

Ahoj pánové
moc děkuji za rychlou reakci. Jo tak to jsem potřeboval.
Bohužel tohle

Kód: Vybrat vše

hodiny = sprintf(&timeinfo,"%H")
mi nefungovalo
ale od Davida to funguje skvěle. Ještě jednou dik

daton
Příspěvky: 519
Registrován: 16 bře 2013, 16:12

Re: Pomoc se výkladem kodu

Příspěvek od daton » 03 kvě 2019, 13:33

Opět bych potřeboval trochu pomoci (no trochu spíš dost :-) ).
Jde o tento kod co je i v odkazu co jsem uvedl výše jen tady je trochu pravený

Kód: Vybrat vše

#include <WiFi.h>
#include "time.h"

const char* ssid       = "YOUR_SSID";
const char* password   = "YOUR_PASS";

const char* ntpServer = "pool.ntp.org";
const long  gmtOffset_sec = 3600;
const int   daylightOffset_sec = 3600;

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); - toto tam nemohu mít protože server bude ovládán dálkově
 // WiFi.mode(WIFI_OFF);
}

void loop()
{
  delay(1000);
  printLocalTime();
}
Jde o to že zhruba tento kod jsem implementoval do svého domácího ovládání a doladuje mi to hodiny, které ale stejně běží odvozené od millis jen se to doladuje každou minutu. A v tom je ten problém, když odpojím internet tak server hodně dlouho čeká na hodnoty a tím se zasekne ovládání.
Jde mi o to jestli by nešlo napsat nějaký příkaz timeout kdy prostě, když třeba do 500ms nezískám data o čase ,tak se jede dál a zkusím to zase příště. Ted to umí čekat i 20s a v tom čase nejde ovládání. Prosím nenapadá někoho jak to udělat?

DavidO
Příspěvky: 712
Registrován: 01 kvě 2013, 21:27

Re: Pomoc se výkladem kodu

Příspěvek od DavidO » 07 kvě 2019, 21:15

Přesně tenhle program se ti zasekává, anebo jiný? (jestli chceš, abychom ti radili s tvým programem, tak nám neukazuj tenhle ale ten, který má problém).

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host