Zaslal: st říjen 07 2015, 17:21 Předmět: ARDUINO mega - opakovani funkce - VYŘEŠENO
Zdravím,
trochu jsem se zasekl u opakovani funkce přesněji mám hlavní funkci,
která při splnění podmínky zavolá další funkci, která se opakuje neustále dokola což je skvělé, ale už se to nedokáže vrátit zpět na tu hlavní funkci,
aby ji to znovu vyhodnotilo, tedy jde mi o to jak se dostat s té volané funkce getTest(); zpět k té hlavní.
Nevíte někdo, jak se dá vracet zpět do loop() co bych tam měl přidat,
aby mě to vrátilo do hlavní funkce?
kód:
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 potrbuju vlozit neco
//co rekne, aby se to zase vratilo
//do loop
}
Předem děkuji za pomoc
Naposledy upravil jiri255 dne pá říjen 09 2015, 3:55, celkově upraveno 1 krát.
to jsem tam mozna nenapsal uplne spravne o ty teploty az tak moc nejde
to je tam, aby v te podmince neco bylo me jde spis o to, jak se vratit s toho getTest do toho loop, tedy nejaky navratovy kod nebo neco takoveho co bych vepsal na konec toho getTest... tohle jsem nejak nepochopil co to presne dela
V čem je problém? Volaná funkce se jaksi ze své podstaty ukončí a vrátí se běh programu do nadřazené... Tak už to funguje nějakých pár let, co se nepoužívá "goto"
Založen: Jun 30, 2005 Příspěvky: 1570 Bydliště: Pardubický kraj
Zaslal: st říjen 07 2015, 19:01 Předmět:
Goto je k vidění například ve zdrojových kódech Linuxu, používá se tam převážně na obsluhu chyb, kdy je potřeba odskočit na konec a uvolnit prostředky.
Založen: Sep 19, 2007 Příspěvky: 3698 Bydliště: Praha
Zaslal: st říjen 07 2015, 19:04 Předmět:
No, a ve většině jazyků bývá k dispozici klíčové slovo return, které funkci ukončí na libovolném místě.
Zmije napsal(a):
Goto je k vidění například ve zdrojových kódech Linuxu, používá se tam převážně na obsluhu chyb, kdy je potřeba odskočit na konec a uvolnit prostředky.
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: st říjen 07 2015, 19:20 Předmět:
Ve starým Basicu na CPC-6128 byla funkce gosub+return. Taky mě byla nějak z principu milejší, než goto, a ani jsem nevěděl proč. Tenkrát jsem měl ještě dost času, než se programování vůbec začalo učit... _________________ 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[?]
Založen: Sep 19, 2007 Příspěvky: 3698 Bydliště: Praha
Zaslal: st říjen 07 2015, 19:38 Předmět:
gosub - return je na něco trochu speciálnějšího než goto; nicméně hlavní potíž s goto je ta, že svádí k lidové tvořivosti. To je pak kód ve stylu hop sem - hop tam, a za chvíli se v tom nevyzná nejen že prase, ale ani sám autor.
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: st říjen 07 2015, 19:46 Předmět:
Jasně, ale dnes to znám v asm (JSA) jako instrukci JUMP - jenže ta je třeba pro větvení nutná. Na volání podprocesů je samozřejmě CALL (ekvivalent GOSUB).
Skákat chaoticky přes JMP někam do prostředku procedury si v asm ani nemůžu dovolit.... _________________ 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[?]
hmm no já zkoušel to goto, ale moc se to nepovedlo hlásí mi to chybu,
že nemám definováno OPAK zde je kod s tim goto
kód:
void loop() {
OPAK;
//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 potrbuju vlozit neco
//co rekne, aby se to zase vratilo
//do loop
goto OPAK;
}
a zkousel jsem i return, ale to se take nevraci
kód:
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 potrbuju vlozit neco
//co rekne, aby se to zase vratilo
//do loop
return;
}
if (pokud je splnena podminka) {
Serial.print("nebezi");
getZkouska; //vykonej podprogram zkouska
} else {
Serial.print("bezi");
getTest(); //jinak vykonej test
}
//a melo by se to vzdycky vratit zpet nad tohle
//a znovu provest kontrolu na ty dve podminky
}
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: st říjen 07 2015, 19:56 Předmět:
Asi se budu muset naučit další programovací jazyk, ale hlavní smyčka snad nezačíná "void" ? _________________ 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[?]
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2, 3, 4, 5Další
Strana 1 z 5
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.