Rušení

Chcete si postavit robota, ale tak nějak nevíte kudy do toho?
Odpovědět
AlesH
Příspěvky: 322
Registrován: 25 úno 2013, 09:18

Re: Rušení

Příspěvek od AlesH » 23 bře 2014, 21:17

Jasně, v programu používáš rekurzi (funkce volá sebe sama) a rekurze nesmí být nekonečná (což ve Tvém případě je, hlavně u funkce cara()). U rekurze musí být vždy zajištěno, že po určitém počtu vnoření skončí, jinak programu dojde paměť a zhroutí se.

Ve Tvém případě bude nejsnazší prostě rekurzi nepoužít a místo toho udělat funkce ultrazvuk() a cara() jako nekonečné smyčky (i když jsou i jiné možnosti řešení).

Takže například můžeš na začátek funkce ultrazvuk() dát label "start_ultrazvuk:" a všechna rekurzivní volání ("ultrazvuk()" uvnitř funkce ultrazvuk()) nahradit příkazem "goto start_ultrazvuk". Podobně to můžeš udělat i u funkce cara(). Je to sice "hnusné", ale fungovat by to mělo.

P.S.: Navíc mám ještě dojem, že funkce ultrazvuk_mereni() je nějak divně umístěna uzavírací složená závorka (za ní ještě pokračuje nějaký "bezprizorní" kód).

haas

Re: Rušení

Příspěvek od haas » 23 bře 2014, 21:40

Aha díky, zítra to vyzkouším.
Ta funkce měření ultrazvuku je stažená ze stránek arduina, já sám jsem ji nevytvořil.Máš lepší řešení?Jestli jo, tak sem s tím :-)

AlesH
Příspěvky: 322
Registrován: 25 úno 2013, 09:18

Re: Rušení

Příspěvek od AlesH » 23 bře 2014, 22:13

OK, to měření ultrazvuku je v pořádku. Jen jsem se trochu zamotal v závorkách. Moje chyba. Zkus tedy jen zrušit tu rekurzi.

haas

Re: Rušení

Příspěvek od haas » 24 bře 2014, 18:37

tak jsem to změnil, na začátku je strat_cara: a na konci programu je goto start_cara; šlape to perfekteně.Díky za radu.
Ještě bych se zeptal, proč mi ultrazvuk detekuje překážku idkyž tam žádná není.Např.Má se vyhnout překážce bližší jak 15cm, pokud je překážka blíž tak se vyhne, jinak ji ignoruje.pokud je cca do 80cm až metru tak ji skutečně ignoruje, ale pokud je vzdálenost třeba 185cm nebo 150cm prostě přes metr tak porád vidí překážku kde není.Na lcd se zobrazí vzálenost překážky 184cm a ikdyž je přímo v podmínce napsáno if(data_ultrazvuk<=15) že překážku vzdálenou víc jak 15cm má ignorovat chová se jako by byla blíž než 15cm a přitom na lcd udává vzdálenost 184 cm, takže ví, že je moc daleko.Čím to může být?Nechal jsem ho jezdit po koberci a taky jsem ho nosil asi metr nad zemí, jestli náhodou se signál neodráží nějak od země, ale efekt byl pořád stejný.

AlesH
Příspěvky: 322
Registrován: 25 úno 2013, 09:18

Re: Rušení

Příspěvek od AlesH » 24 bře 2014, 21:42

Základ toho problému s chybnou detekcí překážky je podle mne v tom, že v programu definuješ proměnnou "data_ultrazvuk" jako typ "char", ale výsledek měření "cm" je typu "long". Takže pokud je hodnota "cm" o trochu větší než 127, tak přiřazení do typu "char" přeteče a výsledkem je záporná hodnota. Tu podmínka samozřejmě vyhodnotí jako "menší než 15" a problém je na světě. Rozumným řešením je definovat ultrazvukové proměnné všude jako "long", nebo "int" (rozhodně ne "char"), aby to nemohlo "přetéct".

haas

Re: Rušení

Příspěvek od haas » 25 bře 2014, 19:49

Tak se zdá, že jsi měl pravdu.Všechno jsem přepsal na long a funguje to.Moc díky :-)

haas

Re: Rušení

Příspěvek od haas » 28 bře 2014, 21:22

V poslední době mi každý den odejde jeden nimh článek.Mám 8článků nimh 1.2 V AA 2500mAh.Po nabití vše fungovalo a najednou robot prudce zpomalil, tak jsem změřil napětí na článcích bez zátěže a každý měl kolem 1.22V a při zátěži dva články okamžitě spadly na 0.3V.Tak jsem musel koupit nové.Koupil jsem stejný typ(výrobce, kapacita)jen ty nové mají prej prodlouženou žovotnost.No tak jsem zapojil těch 6 starých a 2 nové a zdálo se že je to v pohodě.Všechny byli plně nabité.Po nějaké době používání mi včera robot prudce zpomalil, tak jsem přeměřil všechny články při zátěži a měli 1.2 V a jeden z nich(starý) 0.3V tak jsem ho vyhodil.Abych se mohl dále hrát tak jsem použil šest ostatních baterií.Dnes jsem si opět hrál a po chvíli zase prudká ztráta výkonu.No opět jeden starý článek měl 0.3V.Ostatní 1.15V.

Tak se chci zeptat CO SE DĚJĚ? Články jsou staré 1.5 roku nabíjené tak max 20krát.Ale musím přiznat, že nějakou dobu jsem je opakovaně nechal ležet vybité(0.9V) na stole.Tak nevím jestli je to tím nebo to můžou způsobovat ty dvě nové baterie?
Kde nastala zásadní chyba?Odběr robota se pohybuje kolem0.5A.

Pepa z depa
Příspěvky: 76
Registrován: 02 úno 2014, 02:12

Re: Rušení

Příspěvek od Pepa z depa » 04 dub 2014, 12:01

K akumulátorům: pokud jsou od číňanů (to je dneska 90% produkce) je to vždycky sázka do loterie...
Ideální je mít cca stejně starý, stejně nabitý a se stejnou kapacitou. To je ale pro běžnýho smrtelníka skoro utopie.
A o baterkách/akumulátorech třeba z GM, Gesu, TME natož z nějakýho bau, tesca si nedělám žádný iluze...
Osobně nakupuju většinou tady http://www.fulgurbattman.cz/
Sice nejsou nejlevnější, ale ještě se mi nestalo, že by dodali něco špatnýho.
Další (celkem známej) fakt je pájení baterek. Sice to jde, ale rozhodně nedoporučuju. Tím ohřátím se v aku nastartujou chemický reakce, který vedou... hádej kam.
Celý tohle vlákno jsem ani nečet, tak to třeba není tvůj případ.
K těm tvejm aku: bylo by dobrý je dát na nějakou "inteligentní" nabíječku, která je umí nabít/vybít, udělat jim pár cyklů a vyplivne jakou maj kapacitu. Dost často bys jí našel u RC modelářů.

Odpovědět

Kdo je online

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