I håper dette er en enkel forespørsel fra en nykommer til Arduino og programmering. Jeg har forstått at når et program kommer inn i en tomrumsdel, løkker det seg på ubestemt tid. Imidlertid har jeg nylig sett eksempler på skisser der en annen ugyldig $$$$$-seksjon følger lukkingen (av}) av tomrumsløyfen. Når jeg skriver dette, ser jeg på et eksempel på en 7-segment skjerm der «ugyldig Num_Write (int)» følger lukkingen av tomrumsløyfen. Hvis «loop» -delen gjør nettopp det, som jeg har fått til å tro, hvordan får du tilgang til følgende seksjon?
Takk, Rob
Kommentarer
- Ved å ringe det. tutorialspoint.com/cplusplus/cpp_functions.htm
- Den ' er også dekket i Arduino-referanse: arduino.cc/en/Reference/FunctionDeclaration
- Til toppen: cplusplus.com/doc/tutorial/functions
Svar
void loop()
seksjonen er en funksjon, den samme som void setup()
er en funksjon. Når du starter, programmerer du Arduino en annen funksjon, som du ikke kan se i IDE, ring setup()
og ring deretter loop()
gjentatte ganger.
Disse andre funksjonene du har sett, dvs. void Num_Write(int n)
kan kalles fra enten setup()
eller loop()
og de vil utføre instruksjonene sine før de går tilbake til funksjonen som ringte dem. Det er også mulig Num_Write()
kan ringe til andre funksjoner før den returnerer kontrolleren til funksjonen som ringte
Typen void
brukes til å representere ingenting (det er faktisk mer komplisert enn det, men for dette forklaringsnivået vil ingenting gjøre). returner andre typer int
, char
, bool
for eksempel. Så hvis vi hadde en funksjon slik:
int theMeaningOfLife(void) { return 42; }
Dette er en funksjon som returnerer en int
umber) så du vil kalle det slik:
void setup() { int number = theMeaningOfLife(); }
Det er en fangst, funksjonen må erklæres FØR den brukes, dette gjør at kompilatoren kan vet hva du refererer til. Den enkleste måten å gjøre dette på er å skrive funksjonen over funksjonen som kaller den. Den andre måten er å bare skrive funksjonens signatur over funksjonen ved å bruke den, dvs.:
int theMeaningOfLife(void); void setup() { int number = theMeaningOfLife(); }
Den beste måten (men ikke alltid praktisk på en Arduino ) er å ha alle funksjonserklæringer i en topptekstfil (.h) og koden i en .cpp-fil. (Ta en titt i et bibliotek for å se hva jeg mener).
Sammendrag
Det er bare en funksjon som kalles gjentatte ganger, og det er loop
-funksjon. Bare fordi en funksjon returnerer ugyldig, betyr det ikke at den kommer til å løkke gjentatte ganger.
Kommentarer
- Du skrev: “ funksjonen må deklareres FØR den brukes ”. Egentlig kjører Arduino IDE koden din gjennom et forbehandlingstrinn som gjør det for deg, noe som betyr at du ikke trenger å gjøre det selv. Jeg vil fremdeles vurdere god praksis å holde meg til denne regelen, om ikke bare fordi det gjør koden kompilerbar utenfor IDE, f.eks. med en Makefile .
- @EdgarBonet – Takk, det visste jeg aldri. Jeg tror jeg burde glemme det, ellers vil jeg ' begynne å prøve det på jobben og ende opp med å trekke håret ut og prøve å finne ut hvorfor [det] vant ' t kompilere. 🙂