Pomoc se výkladem kodu

DavidO
Příspěvky: 732
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: 526
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: 802
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: 732
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: 526
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: 526
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: 732
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).

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

Re: Pomoc se výkladem kodu

Příspěvek od daton » 18 čer 2019, 13:15

Tak jsem ten problém ještě nevyřešil.
A chci se zeptat zda by bylo možné ukončit hledání času na internetu pokud tento není připojen?

Měl jsem na mysli něco jako

Kód: Vybrat vše

struct tm timeinfo  abort;
což je jen jako příklad a nefunguje to, ale existuje něco takového? POtřeboval bych totiž aby hlavní funkce domácího ovládání nebyla narušena latencemi vzniklými hledáním na odpojeném internetu.
Díky

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

Re: Pomoc se výkladem kodu

Příspěvek od DavidO » 19 čer 2019, 00:44

existuje něco takového?
Ne sice přesně takhle, ale "ano, existuje něco takového".

Ale dokud sem nenahraješ sem celý kód a nenapíšeš, kterou konkrétní verzi knihoven, kterou verzi podpory pro ESP32 a kterou verzi Arduino IDE používáš, bude to zase věštění naslepo a ztráta času všech diskutujících.

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

Re: Pomoc se výkladem kodu

Příspěvek od daton » 24 čer 2019, 11:19

Dobře Davide
dám sem svoji verzi mnou nově vyvíjeného ovládání, ale nemohu se zbavit dojmu, že to nechceš ani tak pro to aby jsi mi pomohl odhalit ten problém jako spíš pro ukázku kodu studentům "jak se to nemá dělat" :-)
Ano nejsem žádný vystudovaný programátor a tedy kod asi obsahuje mnoho chyb případně nedostatků :( , jsem si toho vědom ale je to vývoj.
NO knihovy co používám jsou
wifi 1.2.7
wificlient 1.0.0
webserver 1.0.0
DHT 1.3.4
DO32serv_Icasinfo.zip
(6.26 KiB) Staženo 8 x

Odpovědět

Kdo je online

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