Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Příspěvek od Kony » 25 kvě 2021, 23:05

Ahoj, mam tento kod a potreboval bych pomoct.
potrebuji aby se mi hodnoty stale vypisovali na displej v rozmeti cca 10 sekund (az minuty) a jednou za 10 minut se mi hodnoty odeslali do SQL pomoci php kodu)

https://pastebin.com/gFJyWEe2

a chtel jsem doplnit funkci

https://pastebin.com/FJMa9s92

ale jakmile pustim, tak mi arduino cca po 2 hodinach chcipne a prestane nacitat data z cidla DHT... a prestane odesilat data do SQ

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Příspěvek od KamilV » 25 kvě 2021, 23:40

Po 10 min by se už oplatilo testovat, zda-li je Arduino stále "connected" a pokud ne, znovu se připojit.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Příspěvek od pavel1tu » 26 kvě 2021, 07:00

Jsou vloženy 2 kody, které spolu nesouvisí, dle mne.

- nevím jak jsi vložil to "cekej" do hlavního programu
- před client.stop() se dává delay - podle toho jak dlouho trvá zpracování serveru

Osobně bych zrušil to "cekej" a dal to do looop() - je třeba trochu upravit
- delay 10s zajistí výpisy a vyčítání v cyklu 10s
- pak jen podmínkou IF za 300s zavoláš to odesílání na web + vyresetuješ milis na 300s
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Příspěvek od pavel1tu » 26 kvě 2021, 07:39

No a ještě, jelikož jsi připojen po WiFi - jak máš nastavený router ?
Neodpojí ti to zařízení ? Koukni do logu routeru.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Příspěvek od Kony » 26 kvě 2021, 07:41

Nn neodpoji, to by se jinak nevycitali hodnoty casu z internetu..

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Příspěvek od KamilV » 26 kvě 2021, 13:34

Ideálně sem vložit kompletní kód.
Protože modifikace s cekej() a odesli() musela nutně vést k úpravě hodiny(), tlak() apod.

Stále si myslím, protože v těch dílčích funkcích se odpojuješ, že to v době odesli() není připojeno, ty tam jen kontroluješ, zda jsi connected, ale to asi nejsi a proto odesli() nic nedělá...

Ale opravdu těžko soudit, jak jsi ty dva uvedené kusy kódu spojil...

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Příspěvek od Kony » 26 kvě 2021, 14:33

Takto je cely kod :

https://pastebin.com/jjKFQYns

Uživatelský avatar
kiRRow
Příspěvky: 1163
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Příspěvek od kiRRow » 26 kvě 2021, 16:44

Určitě není vůbec dobré rešit časování ve funkcích pomocí while a delay. Časování by dle mého skromného názoru mělo být řešeno v loopu. Všeobecně jakýkoliv program co nejvíce držet v hlavní smyčce loop. Co deset sekund pak odskočíš poměřit senzory, pak je z loopu vypsat na displej. Výpisy na seriovou linku ve funkcích taky mohlou pozlobit. Jsou vhodé spíš pro trasování co se ve funkci a kdy a proč se děje, když se hledá chyba. Pro výpis informací co ta funkce nakonec provedla, je lepší si to vypsat až po skončení funkce. Taky ti může program zasekávat to, že veškeré statické texty natahuješ do operační paměti, ulož si je pomocí makra F do flash paměti.

A uplně se vykašli na spojování cizích programů do jednoho. Začal bych se sketchem example připojení k wifi. Loop uplně prázdný. Pak bych řešil jak udělat v loopu časování, aby se něco stalo 1x za 10s a něco jiného 1x za 10minut. Pak bych teprve řešil co se bude dít.

Pro inspiraci :
Potřeboval jsem u motoru detekovat zaseknutí, pokud se zasekne, tak se musí na 1vteřinu otáčet opačným směrem a pak zase původním směrem. Pokud se zasekne při opačném směru, musí se vypnout. Během toho však arduino muselo neustále snímat 4snímače, oblsuhovat maticovou klávesnici a lcd displej, provádět měření váhovým senzorem a obsluhovat servo, dále 3 ovládací tlačítka, přijímat příkazy ze sériové linky a odesílat přes sériovou linku informace do PC zpět.
Jenže nejde udělat to, že motor okamžitě otočím na druhou stranu. Je třeba ho odpojit, počkat na doběh, spustit v opačném směru, odpojit, počkat na doběh a pustit v původním směru.
Pokud se detekuje zaseknutý motor a nebo ještě nebyla ukončena funkce odseknutíMotoru, je spuštěna funkce odseknutíMotoru. Ta si zapíše že byla spuštěna, provedla první fázi. Od této doby je funkce spouštěna při každém průběhu loopem, kontroluje jestli uběhnul definovaný čas pro spuštění další fáze. Taky při tom kontroluje jestli nedošlo k dalšímu zaseknutí motoru. Tím je zajištěno že funkce vykonává operace s nějakým časováním a přitom nezdržuje program a pustí ho okamžitě zpět do loopu.

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Příspěvek od Kony » 26 kvě 2021, 19:46

Díky za odpověď, ale nějak se v tom ztrácím :)

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Odesílání hodnot po cca 10 minutách mimo zobrazovaní

Příspěvek od Kony » 26 kvě 2021, 20:50

premyslim jak to udelat....

do loop:

neco jako

pokud milis je o 10 vetsi nez na zacatku if tak proved :

teplota_vlhkost();
tlak();
hodiny();
den_tydnu();
Serial.println("_________________________");
pokud millis je o 300 vetsi jak na zacatku tak proved
odesli();

TO by takto slo ??? Ale presne nevim jak to udelat



Zkousim takto

Kód: Vybrat vše

unsigned long aktualniMillis; //aktualni cas
unsigned long predchoziMillis; //cas poseldni akce

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Seriovy port aktivni");
}

void loop() {
  // put your main code here, to run repeatedly:
  aktualniMillis = millis(); //podivam se na hodinky
  Serial.println(aktualniMillis);
    if(aktualniMillis - predchoziMillis > 10000) { //pokud zhasnout ubehlu uz 500ms od posledni akce?
            predchoziMillis = aktualniMillis; //v tento cas jsem provedl posledni akci
             Serial.println("Po 10000"); //zhasni led
    }
        if(aktualniMillis - predchoziMillis > 50000) { //pokud zhasnout ubehlu uz 500ms od posledni akce?
            predchoziMillis = aktualniMillis; //v tento cas jsem provedl posledni akci
             Serial.println("Po 50000"); //zhasni led
    }
  delay(1000);

}
a to mi funguje pouze na prvni if

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: luger a 7 hostů