I sper că aceasta este o cerere simplă de la un nou venit la Arduino și programare. Am înțeles că, odată ce un program intră într-o secțiune de buclă goală, acesta se învârte în mod nedefinit. Cu toate acestea, am văzut recent exemple de schițe în care o altă secțiune nulă $$$$$ urmează închiderea (de}) a buclei de gol. În timp ce scriu acest lucru, mă uit la un exemplu referitor la un afișaj pe 7 segmente în care „void Num_Write (int)” urmează închiderii buclei void. Dacă secțiunea „buclă” face exact asta, așa cum am fost convins, cum se accesează o secțiune următoare?
Mulțumesc, Rob
Comentarii
- Apelându-l. tutorialspoint.com/cplusplus/cpp_functions.htm
- ' este, de asemenea, acoperit în Referință Arduino: arduino.cc/en/Reference/FunctionDeclaration
- Pentru a completa, cplusplus.com/doc/tutorial/functions
Răspuns
void loop()
secțiunea este o funcție, la fel ca void setup()
este o funcție. Când porniți programul Arduino, programați o altă funcție pe care nu o puteți vedea în IDE, apelați setup()
și apoi apelați loop()
în mod repetat.
Aceste alte funcții pe care le-ați văzut, adică void Num_Write(int n)
pot fi apelate fie de la setup()
, fie de la loop()
și își vor executa instrucțiunile înainte de a reveni la funcția care le-a chemat. Este, de asemenea, posibil ca Num_Write()
să apeleze alte funcții înainte ca acesta să revină controlerului la funcția care a apelat it.
Tipul void
este folosit pentru a reprezenta nimic (este de fapt mai complex decât asta, dar pentru acest nivel de explicație nimic nu va face). Alte funcții pot returnează alte tipuri int
, char
, bool
de exemplu. Deci dacă am avea o funcție așa:
int theMeaningOfLife(void) { return 42; }
Aceasta este o funcție care returnează un int
(un umber) deci l-ați numi astfel:
void setup() { int number = theMeaningOfLife(); }
Există o singură captură, funcția trebuie declarată ÎNAINTE de a fi utilizată, acest lucru permite compilatorului să știi la ce te referi. Cel mai simplu mod de a face acest lucru este să scrieți funcția deasupra funcției care o numește. A doua modalitate este să scrieți doar semnătura funcției deasupra funcției folosind-o, adică:
int theMeaningOfLife(void); void setup() { int number = theMeaningOfLife(); }
Cel mai bun mod (dar nu întotdeauna practic pe un Arduino ) este de a avea toate declarațiile funcționale într-un fișier antet (.h) și codul într-un fișier .cpp. (Aruncați o bibliotecă pentru a vedea ce vreau să spun).
Rezumat
Există o singură funcție care este apelată în mod repetat și care este loop
funcție. Doar pentru că o funcție returnează anularea nu înseamnă că se va repeta în mod repetat.
Comentarii
- Ați scris: „ funcția trebuie declarată ÎNAINTE de a fi utilizată ”. De fapt, IDE-ul Arduino rulează codul dvs. printr-o etapă de pre-procesare care face asta pentru dvs., ceea ce înseamnă că nu trebuie să o faceți singur. Încă aș considera o bună practică pentru a respecta această regulă, doar pentru că face codul compilabil în afara IDE, de ex. cu un Makefile .
- @EdgarBonet – Mulțumesc, nu am știut asta niciodată. Cred că ar trebui să-l uit, altfel, în caz contrar, ' voi începe să încerc la locul de muncă și voi sfârși prin a-mi scoate părul încercând să aflu de ce [a] câștigat ' nu compilați. 🙂