• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
viod loop kolejności
#1
Mam takie zapytanie laika 

void setup - to wiadomo

Ale jeżeli sobie skonstruowałem tak:

void loop();{

  x();
  y();
 z(); 
}

void z(){
kod
}
void x(){
kod
}
void y(){
kod
}


Która kolejność się liczy?? odwołanie w loop czy z góry na dól void z,x,y.... Czy to obojętne i leci wszystko z góry na dół...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#2
To co masz poniżej loop to definicje funkcji, takie przepisy na ciasto, to co wewnątrz loop to ich wywołanie, czy faktycznie wykorzystanie przepisu - robienie ciasta. Nie ważne jak masz poukładane przepisy na ciasta na półce, upieką się tak jak je zaczniesz wykorzystywać. Możesz mieć nawet tak, że przepis na krem użyjesz w przepisie na ciasto, wtedy kolejność też nie ma znaczenia, przynajmniej w Arduino nie ma znaczenia jak je sobie definiujesz, ale co do zasady powinny być jeszcze deklaracje przed wywołaniem gdzie podajesz tylko nazwę funkcji, typ argumentu i typ zwracanej wartości. Na szczęście Arduino zanim wywali błąd sprawdza czy nie ma tego gdzieś zdefiniowanego już po wywołaniu.
Czyli krótko, ta kolejność z loop się liczy.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Dzięki, a czy definicje funkcji mają być przed setup?? bo widziałem takie przykłady. Odnośnie deklaracji powinna być zaraz pod bibliotekami?
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#4
Najważniejsze byś wiedział, że mają być. Zasada jest taka jak ze zmiennymi, powinny być przed użyciem przynajmniej deklaracje, możesz sobie podzielić bloki programu tak by mieć porządek, dodawanie bibliotek, define, zmienne, obiekty, funkcje, setup, loop, definicje funkcji - jak Ci wygodnie, tak by się nie gubić. Jak kodu przybędzie to i tak trzeba kombinować inaczej.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
czyli biorąc powyżej przykład:

void x (int, int);
void y (int); // int to tylko przykład w tym miejscu ma być obiekt, funkcja.
void z(int,int);


void setup(){
}

void loop();{

x();
y();
z();
}

void z(){
kod
}
void x(){
kod
}
void y(){
kod
}
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#6
Na pewno nie może być być tak że w nagłówku masz void x (int, int); a potem piszesz funkcję void x(){kod}. To musi być identyczne, nie możesz obiecywać, że użyjesz dwóch intów jako argumenty, a potem nie podać tego w definicji funkcji, nie możesz zdefiniować funkcji z dwoma argumentami, a przy wywołaniu np. w loop ich nie podać. To musi być wszystko identyczne. Tak samo zwracane wyniki. Nie możesz zrobić funkcji void a potem w ciele funkcji użyć return 5. Już lepiej po prostu pominąć deklarację nagłówków, Arduino to przecierpi, znajdzie, użyje.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#7
Kurcze tak to zrozumiałem jak tu

http://edu.pjwstk.edu.pl/wyklady/pro/scb...ode59.html
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#8
Nie wiem, może dobrze myślisz, ale źle napisałeś. Zobacz co masz, a ma być tak:

Kod:
void x (int, int); //tu moga byc nazwy, ale   nie musza
int y (int zmienna1); // zwykle sa, bo sie po prostu kopiuje te linijke z funkcji tutaj
void z(int zmienna1,int zmienna2);



void setup(){
 Serial.begin(115200); //dodalem by cokolwiek to robilo po skompilowaniu
}

void loop(){

x(1,2); //uzycie funkcji x, nie mozna tu zrobic x() ani x(2) ani x(3,15,18)
//ma byc dokladnie to co przed setup, po loop i wszedzie to samo,
//tyle samo argumentow, takiego samego typu, jak obiecasz inta
//to nie mozesz podac x("napis","drugi napis");
y(3);
int zmienna2=7; //to jest zupelenie inna zmienna niz ta w funkcjach
z(zmienna2,4); //do zmiennej1 w funkcji z zostanie wstawiona zmienna2 z loop, a do zmiennej 2 funkcji z stala =4
}

void z(int zmienna1,int zmienna2){ //tu już powinny byc nazwy zmiennych argumentow bo gdzies chcesz je uzyc wewnatrz funkcji
//cialo funkcji,np:
Serial.println(zmienna1-zmienna2); // tu sa uzyte argumenty funkcji, teoretycznie mozna wziac argumenty i w funkcji nic z nimi nie zrobic, ale jak juz bierze to cos z nimi sie robi
return; //warto wiedziec, ze nawet w voidzie mozna uzyc return, oczywiscie ma nic nie zwracac ale mozna wykorzystac do przerwania funkcji
Serial.println(zmienna1*zmienna2);//wtedy to sie nie wykona
}

void x (int zmienna1, int zmienna2){
Serial.println(zmienna1+zmienna2);
}
int y (int zmienna1){
// te funkcje przerobilem na zwracajaca inta
return zmienna1*5;
}
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości