I mam nadzieję, że jest to prosta prośba od nowicjusza do Arduino i programowania. Zrozumiałem, że gdy program wchodzi do sekcji pustej pętli, wykonuje pętlę w nieskończoność. Jednak ostatnio widziałem przykłady szkiców, w których kolejna pusta sekcja $$$$$ następuje po zamknięciu (by}) pustej pętli. Pisząc to, patrzę na jeden przykład dotyczący 7-segmentowego wyświetlacza, w którym „void Num_Write (int)” następuje po zamknięciu pętli void. Jeśli sekcja „pętla” właśnie to robi, jak sądziłem, w jaki sposób można uzyskać dostęp do następnej sekcji?
Dziękuję, Rob
Komentarze
- Wzywając go. tutorialspoint.com/cplusplus/cpp_functions.htm
- ' jest również omówione w Dokumentacja Arduino: arduino.cc/en/Reference/FunctionDeclaration
- Na koniec: cplusplus.com/doc/tutorial/functions
Odpowiedź
void loop()
jest funkcją, tak samo jak void setup()
jest funkcją. Po uruchomieniu Arduino zaprogramuj inną funkcję, której „nie widać w IDE, wywołaj setup()
, a następnie wielokrotnie wywołuje loop()
.
Tę inną funkcję, którą widziałeś, np. void Num_Write(int n)
można wywołać z setup()
lub loop()
i wykonają swoje instrukcje przed powrotem do funkcji, która je wywołała. Jest również możliwe, że Num_Write()
może wywołać inne funkcje, zanim zwróci kontroler do funkcji, która wywołała
Typ void
jest używany do reprezentowania niczego (w rzeczywistości jest bardziej skomplikowany, ale na tym poziomie wyjaśnienia nic nie da). Inne funkcje mogą zwracają inne typy na przykład int
, char
, bool
. Więc gdybyśmy mieli funkcję w ten sposób:
int theMeaningOfLife(void) { return 42; }
To jest funkcja, która zwraca int
(an umber), więc nazwałbyś to tak:
void setup() { int number = theMeaningOfLife(); }
Jest jeden haczyk, funkcja musi być zadeklarowana PRZED jej użyciem, to pozwala kompilatorowi na wiesz, o czym mówisz. Najprostszym sposobem na zrobienie tego jest napisanie funkcji powyżej funkcji, która ją wywołuje. Drugim sposobem jest po prostu napisanie podpisu funkcji nad funkcją, która jej używa, tj .:
int theMeaningOfLife(void); void setup() { int number = theMeaningOfLife(); }
Najlepszy sposób (ale nie zawsze praktyczny na Arduino ) to mieć wszystkie deklaracje funkcji w pliku nagłówkowym (.h), a kod w pliku .cpp. (Zajrzyj do biblioteki, żeby zobaczyć, co mam na myśli).
Podsumowanie
Jest tylko jedna funkcja, która jest wywoływana wielokrotnie – loop
. To, że funkcja zwraca void, nie oznacza, że będzie się powtarzać w pętli.
Komentarze
- Napisałeś: „ funkcja musi zostać zadeklarowana PRZED jej użyciem ”. W rzeczywistości Arduino IDE przeprowadza kod przez etap wstępnego przetwarzania, który robi to za Ciebie, co oznacza, że nie musisz robić tego samodzielnie. Nadal uważałbym za dobrą praktykę, aby trzymać się tej zasady, choćby dlatego, że umożliwia to kompilację kodu poza IDE, np. z Makefile .
- @EdgarBonet – Dzięki, nigdy tego nie wiedziałem. Myślę, że powinienem o tym zapomnieć, w przeciwnym razie ' zacznę wypróbowywać to w pracy i skończę z wyrywaniem włosów, próbując zrozumieć, dlaczego wygrał ' t kompiluj. 🙂