Stránka 1 z 2

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

Napsal: 25 kvě 2021, 23:05
od Kony
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

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

Napsal: 25 kvě 2021, 23:40
od KamilV
Po 10 min by se už oplatilo testovat, zda-li je Arduino stále "connected" a pokud ne, znovu se připojit.

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

Napsal: 26 kvě 2021, 07:00
od pavel1tu
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

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

Napsal: 26 kvě 2021, 07:39
od pavel1tu
No a ještě, jelikož jsi připojen po WiFi - jak máš nastavený router ?
Neodpojí ti to zařízení ? Koukni do logu routeru.

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

Napsal: 26 kvě 2021, 07:41
od Kony
Nn neodpoji, to by se jinak nevycitali hodnoty casu z internetu..

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

Napsal: 26 kvě 2021, 13:34
od KamilV
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...

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

Napsal: 26 kvě 2021, 14:33
od Kony
Takto je cely kod :

https://pastebin.com/jjKFQYns

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

Napsal: 26 kvě 2021, 16:44
od kiRRow
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.

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

Napsal: 26 kvě 2021, 19:46
od Kony
Díky za odpověď, ale nějak se v tom ztrácím :)

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

Napsal: 26 kvě 2021, 20:50
od Kony
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