ARDUINO mega - opakovani funkce - VYŘEŠENO

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
mtajovsky
Příspěvky: 3728
Registrován: 19 zář 2007, 00:00
Bydliště: Praha

#16 Příspěvek od mtajovsky »

Ten nebude vidět z principu. Měl byste si něco pečíst o blokové struktuře programu a rozsazích viditelnosti.
Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 00:00

#17 Příspěvek od jiri255 »

když ten program pustím a dívám se do serial výpisu, tak tam vidím,
že se pořád opakuje ta getTest a tu hlavní podmínku to vezme v úvahu jen při spuštění a pak už se to k ní nevrací testoval jsem to na tom teplomer1 větší jak 50
Uživatelský avatar
lesana87
Příspěvky: 4399
Registrován: 20 zář 2014, 00:00

#18 Příspěvek od lesana87 »

ZdenekHQ píše:Asi se budu muset naučit další programovací jazyk, ale hlavní smyčka snad nezačíná "void" ?

A co by měla vracet a hlavně komu, když nad ní nic není?
Uživatelský avatar
lesana87
Příspěvky: 4399
Registrován: 20 zář 2014, 00:00

#19 Příspěvek od lesana87 »

jiri255 píše:když ten program pustím a dívám se do serial výpisu, tak tam vidím,
že se pořád opakuje ta getTest a tu hlavní podmínku to vezme v úvahu jen při spuštění a pak už se to k ní nevrací testoval jsem to na tom teplomer1 větší jak 50

Jak můžeš vidět na sériovém výpisu funkci getTest, když ta na sériový port nic neposílá?
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#20 Příspěvek od ZdenekHQ »

Z Pascalu jsem zvyklej na "begin" a "end", void je snad alternativa "procedure" nebo "function", které samozřejmě unvitř mají opět begin a end.

Takže hlavní smyčka by měla být "loop", ne "void loop" ?

Ale tady jsem na tenkém ledu, tohle je mimo moje znalosti.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 00:00

#21 Příspěvek od jiri255 »

z te void getTest se to ma vratit zpet do loop na to if zkontrolovat ho to a podle podminky zvolit bud getzkouska nebo getTest potom vykonat jeden z tech zvolenych a vratit se zase do loop na to if znova zkontrolovat podminku a opet vykonat bud getZkouska nebo getTest a takhle porad dokola,
ale s tech void getneco se to nad to if nevraci :-(
Naposledy upravil(a) jiri255 dne 07 říj 2015, 21:04, celkem upraveno 1 x.
Uživatelský avatar
Zmije
Příspěvky: 1691
Registrován: 30 čer 2005, 00:00
Bydliště: Pardubický kraj

#22 Příspěvek od Zmije »

Uživatelský avatar
lesana87
Příspěvky: 4399
Registrován: 20 zář 2014, 00:00

#23 Příspěvek od lesana87 »

ZdenekHQ píše:void je snad alternativa "procedure" nebo "function", které samozřejmě unvitř mají opět begin a end.

void loop říká, že to co funkce loop vrací nikoho nezajímá. :)
Uživatelský avatar
frpr666
Příspěvky: 1051
Registrován: 28 pro 2009, 00:00

#24 Příspěvek od frpr666 »

už se to k ní nevrací

možná se vrací, ale navenek se to jeví, že se to nevrací. :D
Podle mě děláš moc složité programy, zkus to trochu zjednodušit. Stáhni si na webu nějakou knihu o programovaní v C.
no pain - no gain :D
Uživatelský avatar
lesana87
Příspěvky: 4399
Registrován: 20 zář 2014, 00:00

#25 Příspěvek od lesana87 »

jiri255 píše:ale s tech void getneco se to nad to if nevraci :-(

Ptám se znovu, jak víš, že se to z těch getneco nevrací? Ono to nevypisuje na sériový port bezi/nebezi?:
Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 00:00

#26 Příspěvek od jiri255 »

do tech void getneco jsem pridal serialprint a vidim ze se vykonava porad jen ta jedna podminka navic kdyz je teplota pod 50 ma to delat getZkouska a kdyz ji zvysim nad 50 ma to delat getTest a to funguje jen pri zapnuti arduina vybere to pokud je teplota pod 50 getZkouska a pak uz je jedno jestli teplotu zvysim nad 50 porad se toci ta getZkouska a k te hlavni funkci napsane v loop uz se to nevrati pokud znova neresetuju arduino...
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#27 Příspěvek od ZdenekHQ »

lesana87 píše:
ZdenekHQ píše:void je snad alternativa "procedure" nebo "function", které samozřejmě unvitř mají opět begin a end.

void loop říká, že to co funkce loop vrací nikoho nezajímá. :)


Aha. Děkuji.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Uživatelský avatar
lesana87
Příspěvky: 4399
Registrován: 20 zář 2014, 00:00

#28 Příspěvek od lesana87 »

V getTest ti chybí uzavírací závorka za tělem funkce, to ti nevadí?
Uživatelský avatar
mtajovsky
Příspěvky: 3728
Registrován: 19 zář 2007, 00:00
Bydliště: Praha

#29 Příspěvek od mtajovsky »

zmije << Jo, to je příklad smysluplného goto, i když já raději uzavřu výkonnou část kódu do:

Kód: Vybrat vše

do
{
    ...
    if (error) break;
    ...
}while(0);

// záverečné a úklidové akce


a namísto goto se pak užije break. Jiný dobrý příklad pro goto je ukončení vícenásobně vnořeného cyklu.
Uživatelský avatar
mtajovsky
Příspěvky: 3728
Registrován: 19 zář 2007, 00:00
Bydliště: Praha

#30 Příspěvek od mtajovsky »

lesana87 píše:V getTest ti chybí uzavírací závorka za tělem funkce, to ti nevadí?
Že to nevyhodil překladač?

jiri255 << V prvé řadě pište kód přehledněji. Nic nevnucuji, ale například:

Kód: Vybrat vše

void loop()
{
// ------ hlavni funkce ke ktere se potrebuju vracet -----

    if (teplomer1() >=50)
    {
        Serial.print("nebezi");
    }
    else
    {
        Serial.print("bezi");
        getTest();
    }
}

void getTest()
{
    if (teplomer2() <= 30)
    {
        digitalWrite(2,HIGH);
/*
 * a tady muzou byt dalsi podminky
 * else if a podobne
 * sem nekam potrebuji vlozit neco
 * co rekne, aby se to zase vratilo
 * do loop     
*/
    }


je asi přehlednější a ta chybějící závorka je hned vidět.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“