Pomoc se výkladem kodu

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

Re: Pomoc se výkladem kodu

Příspěvek od DavidO »

Ale tu knihovnu stejně potřebuješ - odkud by se vzal ten ntpClient?
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: Pomoc se výkladem kodu

Příspěvek od daton »

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: 1359
Registrován: 04 led 2016, 17:18

Re: Pomoc se výkladem kodu

Příspěvek od fulda »

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: 1133
Registrován: 01 kvě 2013, 21:27

Re: Pomoc se výkladem kodu

Příspěvek od DavidO »

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;
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: Pomoc se výkladem kodu

Příspěvek od daton »

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: 664
Registrován: 16 bře 2013, 16:12

Re: Pomoc se výkladem kodu

Příspěvek od daton »

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: 1133
Registrován: 01 kvě 2013, 21:27

Re: Pomoc se výkladem kodu

Příspěvek od DavidO »

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).
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: Pomoc se výkladem kodu

Příspěvek od daton »

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: 1133
Registrován: 01 kvě 2013, 21:27

Re: Pomoc se výkladem kodu

Příspěvek od DavidO »

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.
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: Pomoc se výkladem kodu

Příspěvek od daton »

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 300 x
Odpovědět