I spero che questa sia una semplice richiesta da un nuovo arrivato ad Arduino e alla programmazione. Ho capito che una volta che un programma entra in una sezione di loop vuoto, si ripete allinfinito. Tuttavia, ho visto recentemente esempi di schizzi in cui unaltra sezione vuota $$$$$ segue la chiusura (da}) del ciclo vuoto. Mentre scrivo questo, sto guardando un esempio riguardante un display a 7 segmenti in cui “void Num_Write (int)” segue la chiusura del ciclo void. Se la sezione “loop” fa proprio questo, come sono stato indotto a credere, come si accede a una sezione successiva?
Grazie, Rob
Commenti
- Chiamandolo. tutorialspoint.com/cplusplus/cpp_functions.htm
- ' è anche trattato nel Riferimento ad Arduino: arduino.cc/en/Reference/FunctionDeclaration
- Per finire: cplusplus.com/doc/tutorial/functions
Answer
Il void loop()
è una funzione, come void setup()
è una funzione. Quando avvii Arduino programma unaltra funzione, che non puoi “vedere nellIDE, chiama setup()
e poi chiama loop()
ripetutamente.
Queste altre funzioni che hai visto, ad esempio void Num_Write(int n)
possono essere chiamate da setup()
o loop()
ed eseguiranno le loro istruzioni prima di tornare alla funzione che le ha chiamate. È anche possibile che Num_Write()
possa chiamare altre funzioni prima di restituire il controller alla funzione che ha chiamato it.
Il tipo void
è usato per non rappresentare nulla (in realtà è più complesso di così, ma per questo livello di spiegazione non funziona nulla). Altre funzioni possono restituire altri tipi int
, char
, bool
ad esempio. Quindi, se avessimo una funzione in questo modo:
int theMeaningOfLife(void) { return 42; }
Questa è una funzione che restituisce un int
(un umber) quindi la chiameresti così:
void setup() { int number = theMeaningOfLife(); }
Cè un problema, la funzione deve essere dichiarata PRIMA di essere usata, questo permette al compilatore di sapere a cosa ti riferisci. Il modo più semplice per farlo è scrivere la funzione sopra la funzione che la chiama. Il secondo modo è scrivere semplicemente la firma della funzione sopra la funzione che la utilizza, ad esempio:
int theMeaningOfLife(void); void setup() { int number = theMeaningOfLife(); }
Il modo migliore (ma non sempre pratico su un Arduino ) è avere tutte le dichiarazioni di funzione in un file di intestazione (.h) e il codice in un file .cpp. (Dai unocchiata a una libreria per vedere cosa intendo).
Riepilogo
Esiste solo una funzione che viene chiamata ripetutamente ed è loop
funzione. Solo perché una funzione restituisce void “non significa che verrà ripetuta ripetutamente.
Commenti
- Hai scritto:” la funzione deve essere dichiarata PRIMA di essere utilizzata ”. In realtà, lIDE di Arduino esegue il tuo codice attraverso una fase di pre-elaborazione che lo fa per te, il che significa che non devi farlo da solo. Considero comunque una buona pratica attenermi a questa regola, se non altro perché rende il codice compilabile al di fuori dellIDE, ad es. con un Makefile .
- @EdgarBonet – Grazie, non lho mai saputo. Penso che dovrei dimenticarlo, altrimenti ' inizierò a provarlo al lavoro e finirò per strapparmi i capelli cercando di capire perché [ha] vinto ' t compilare. 🙂