Stránka 2 z 5

Napsal: 07 říj 2015, 20:57
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.

Napsal: 07 říj 2015, 20:58
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

Napsal: 07 říj 2015, 20:58
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í?

Napsal: 07 říj 2015, 21:01
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á?

Napsal: 07 říj 2015, 21:03
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.

Napsal: 07 říj 2015, 21:03
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 :-(

Napsal: 07 říj 2015, 21:03
od Zmije

Napsal: 07 říj 2015, 21:06
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á. :)

Napsal: 07 říj 2015, 21:07
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

Napsal: 07 říj 2015, 21:07
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?:

Napsal: 07 říj 2015, 21:08
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...

Napsal: 07 říj 2015, 21:08
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.

Napsal: 07 říj 2015, 21:11
od lesana87
V getTest ti chybí uzavírací závorka za tělem funkce, to ti nevadí?

Napsal: 07 říj 2015, 21:12
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.

Napsal: 07 říj 2015, 21:26
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.