void setup()

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
Mau
Příspěvky: 18
Registrován: 11 zář 2020, 15:13
Reputation: 0

void setup()

Příspěvek od Mau » 11 zář 2020, 15:19

Prosím,
vysvětlíte mi někdo jaký je rozdíl, když napíšu příkazy do části "setup()" nebo je napíši ještě před tuto část? Přijde mi, že je to stejné, vždy se příkazy provedou....
Zkoušel jsem hledat, odpověď jsem nenašel, vždy jen co je to "setup()" - to je jasné... ale když to napíši mimo to, tak to také dělá co má.... ??

Díky

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: void setup()

Příspěvek od ondraN » 11 zář 2020, 15:47

To, že se to provede a zatím to funguje, neznamená že je to správně. Vnějšek funkcí setup a loop je určený výhradně k deklaraci ,definici a inicializaci proměnných a objektů, vnitřek funkce setup je pro kód který má proběhnout jednou a prioritně a loop pro opakovaný běh kódu. To že běží i kód napsaný mimo, můžeš chápat i jako chybu, která zatím nebyla odstraněna :mrgreen: A až ji opraví, bude spousta různých programů mít problém s kompilací. Ale tak napsaného kódu asi není škoda.

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: void setup()

Příspěvek od gilhad » 11 zář 2020, 16:25

Otazkou je, co mini temi "prikazy".
Muj tip je, ze ruzna prirazeni promennych, kde se nejdriv provedou ta "mimo" jako inicializace a pak ta "uvnitr", jako soucast behu funkce setup.
IMHO se tohle prelozi a probehne spravne

Kód: Vybrat vše

int a=1;
int b;
int c;
void setup(){
  b=2;
  if (a==1)
  	 {c=1; }
  else 
  	{c=2;}
}
ale tohle neprojde prekladacem protoze tam jsou prikazy mimo funkci

Kód: Vybrat vše

int a=1;
int b;
int c;
  b=2;
  if (a==1)
  	 {c=1; }
  else 
  	{c=2;}

void setup(){
}

ArduXPP
Příspěvky: 361
Registrován: 14 pro 2017, 19:31
Reputation: 0
Kontaktovat uživatele:

Re: void setup()

Příspěvek od ArduXPP » 11 zář 2020, 21:46

Každá funkce má nějaký úkol. Setup se dá označit za start, nebo prvotní nastavení. Takže když budeš potřebovat třeba nastavit rychlost komunikace, nastavit funkci pinu, ale není tam potřeba, aby to jelo pořád dokola. Takže tam příjde dalo by se říci, že nastavení, ale pozor, opravdu jen nastavení. Setup je nastaven pro provedení jednou. Dokud nedojde k restartu. K proměnné, když dáš před setup proměnné, jde použít všude. No a když bude přímo v setup proměnné, tak jde provést jen tam. Loop, tam se opakuje vše dokola, když chceš tutu smyčku zpomalit, tak použiješ třeba delay. Takže loop se dá používat tam, kde potřebuješ načítat data, u kterých potřebuješ opakování.

Mau
Příspěvky: 18
Registrován: 11 zář 2020, 15:13
Reputation: 0

Re: void setup()

Příspěvek od Mau » 15 zář 2020, 07:47

ondraN píše:
11 zář 2020, 15:47
...... Ale tak napsaného kódu asi není škoda.
Díky všem - no a právě, aby bylo takového kódu škoda, proto se raději ptám :)

Mau
Příspěvky: 18
Registrován: 11 zář 2020, 15:13
Reputation: 0

Re: void setup()

Příspěvek od Mau » 15 zář 2020, 07:52

ArduXPP píše:
11 zář 2020, 21:46
Každá funkce má nějaký úkol.......
Ano, díky, ale toto je jasné. Ptám se na část programu mimo setup() a mimo loop(), tedy něco jako v hlavičce programu, před volání setup() a loop() Co tam má být, musí být, nemá být či nesmí být. A to mi asi bylo odpovězeno výše.

Díky

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: void setup()

Příspěvek od ondraN » 15 zář 2020, 14:59

To, na co jsi se ptal, je i přímo zakotveno v definici jazyka C/C++. "Jakýkoli příkaz nemůže být umístěn mimo funkci." Proto, když se píše program v klasickém prostředí, tak všechny příkazy začínají ve funkci main(). To je vlastně vstupní funkce, kterou spouští operační systém pro vykonání proramu a do ni se i pomocí parametrů přenášejí spouštěci parametry a vrací se chybové parametry. V arduino prostředí je to trochu jinak. Starší arduino překladače dovolovaly umístit kód mimo obě funkce a na netu se dá najít dost programů takto napsaných. Současná verze arduino IDE už to nedovolí (musel jsem si to vyzkoušet, protože mne ani nenapadlo tam cpát kód) jak už i psal někdo výše.

Odpovědět

Kdo je online

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