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í.
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

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.