» Poradna » Ostatní

Arduino - Nesmyslné výsledky po přidání delay ve funkci loop

 |   |  Microsoft Windows 10 Chrome 59.0.3071.86

Ahoj, mám ještě jeden dotaz s voláním funkcí, první funkce vždy vytiskne nesmysl.takto mi to vrací správné výsledky ..void loop (){ nacti () ; nacti () ; nacti () ; nacti () ; nacti () ; nacti () ;}### jeden loop == jeden řádek ###2058 , 2057 , 2058 , 2058 , 2058 , 20572057 , 2056 , 2057 , 2056 , 2057 , 20582062 , 2063 , 2062 , 2062 , 2063 , 20632063 , 2063 , 2063 , 2063 , 2063 , 2063--------------------------Pokud ovšem potřebuji udělat nějakou prodlevu před opakováním toho loopu, nastane problém s první volanou funkcívoid loop (){ nacti () ; nacti () ; nacti () ; nacti () ; nacti () ; nacti () ;delay(1000);}### opět jeden loop == jeden řádek ###### po přidání delay je v každém řádku první číslo nesmysl ###10901 , 2069 , 2067 , 2067 , 2067 , 2067 , 6530 , 2067 , 2068 , 2068 , 2068 , 2067 , 3648 , 2065 , 2065 , 2066 , 2065 , 2066 , 2486 , 2065 , 2066 , 2066 , 2065 , 2066 , 2849 , 2066 , 2066 , 2066 , 2066 , 2066 , 2352 , 2059 , 2059 , 2060 , 2059 , 2060 , 5464 , 2062 , 2062 , 2062 , 2062 , 2062 , Neví někdo, proč tomu tak je?

Mohlo by vás také zajímat

Odpovědi na otázku

 | Microsoft Windows 10 IE 11.0

Nesdělil jsi nám, co načítáš. Já mám například vyzkoušeno, že při měření vlhkosti půdy průchodem proudu jsou úplně jiné výsledky po pauze, než když se měří v kuse.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 59.0.3071.86

Načítám pouze digitální PIN (0 or 1) + micros () + primitivní matematický vzorec, nic víc.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 58.0.3029.110

Jelikož neumíme věštit a na monitor ti taky nevidíme, tak ti těžko někdo poradí...Co se děje ve funkci nacti()?A o for cyklu jsi slyšel?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 7 Firefox 52.0

Mozno by bolo lepsie pouzit casovac a vykonanie nacti() dat do obsluhy prerusenia po timeoute casovaca. Neviem ale ako je to na Arduino.

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Macintosh OS X Chrome 59.0.3071.86

Jak píší ostatní, není zřejmé co se děje v tvých funkcích, ale jednu radu bych ti dal. Zapomeň na fukci delay. Ta je v arduinu jen pro zlost. Namísto toho si dávej do proměnné čas (milis()) a zjišťuj si rozdíl mezi posledním uložením a aktuálním časem. Když je víc než nastavená hodnota (1000ms) tak načti vstupy, a ulož aktuální čas. Delay v podstatě na celou nastavenou dobu zastaví procesor.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 59.0.3071.86

Můžeš tohle upřesnit? "Když je víc než nastavená hodnota (1000ms) tak načti vstupy, a ulož aktuální čas." Díky

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Macintosh OS X Chrome 59.0.3071.109

asi tak (psal jsem jen z ruky bez kontrol, takze ze ev. syntax chybu se omlouvam):https://paste.ofcode.org/36Rg2aWUqnZrczqVFVZ55hbint lastTime, period; void setup() { lastTime = millis(); period = 1000;} void loop() { if(millis()-lastTime >= period){ lastTime = millis(); //udělej co je třeba po uběhnutí nastavené periody } // tady nic, nebo cokoliv co musíš hlídat furt}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 59.0.3071.86

Nejde o syntax, jde o logiku a tu jsi napsal k pochopení. Díky za radu.PS: Možná by takto šla vytvořit i vlastní funkce myDelay() ve které by byl nějaký loop s podmínkou a break-em, a pak volat dle potřeby jen tu funkci, třeba i pokaždé s jiným paramterem "period". Ne?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 59.0.3071.86

Možná tak ten tvůj, chytrolíne! Poradit neumíš, ale vysírat budeš všude..

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Arduino, Loop, Delay, Void, Nesmysl, První číslo, První funkce, Loopu