Stránka 1 z 1

void setup()

Napsal: 11 zář 2020, 15:19
od Mau
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

Re: void setup()

Napsal: 11 zář 2020, 15:47
od ondraN
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.

Re: void setup()

Napsal: 11 zář 2020, 16:25
od gilhad
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(){
}

Re: void setup()

Napsal: 11 zář 2020, 21:46
od ArduXPP
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í.

Re: void setup()

Napsal: 15 zář 2020, 07:47
od Mau
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 :)

Re: void setup()

Napsal: 15 zář 2020, 07:52
od Mau
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

Re: void setup()

Napsal: 15 zář 2020, 14:59
od ondraN
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.