I hoop dat dit een eenvoudig verzoek is van een nieuwkomer in Arduino en programmeren. Ik heb begrepen dat zodra een programma een lege lussectie binnengaat, het voor onbepaalde tijd doorloopt. Ik heb echter onlangs voorbeelden gezien van schetsen waarbij een andere lege sectie van $$$$$ volgt op de sluiting (door}) van de lege lus. Terwijl ik dit schrijf, kijk ik naar een voorbeeld van een 7-segment display waarbij “void Num_Write (int)” volgt op het sluiten van de leegte lus. Als de “loop” -sectie precies dat doet, zoals ik ben doen geloven, hoe wordt dan een volgende sectie geopend?
Bedankt, Rob
Reacties
- Door het aan te roepen. tutorialspoint.com/cplusplus/cpp_functions.htm
- Het ' wordt ook behandeld in de Arduino-referentie: arduino.cc/en/Reference/FunctionDeclaration
- Om het af te maken: cplusplus.com/doc/tutorial/functions
Antwoord
De void loop()
sectie is een functie, hetzelfde als void setup()
is een functie. Wanneer je je Arduino-programma start, programmeer je een andere functie, die je “niet kunt zien in de IDE, bel setup()
en roep vervolgens loop()
herhaaldelijk aan. / p>
Deze andere functie die je hebt gezien, dwz void Num_Write(int n)
, kan worden aangeroepen vanuit setup()
of loop()
en ze zullen hun instructies uitvoeren voordat ze terugkeren naar de functie die ze heeft aangeroepen. Het is ook mogelijk dat Num_Write()
andere functies kan aanroepen voordat het de controller terugstuurt naar de functie die heeft aangeroepen het.
Het type void
wordt gebruikt om niets voor te stellen (het is eigenlijk complexer dan dat, maar voor dit niveau van uitleg is niets voldoende). Andere functies kunnen retourneer andere typen int
, char
, bool
bijvoorbeeld. Dus als we een functie hadden zoals dit:
int theMeaningOfLife(void) { return 42; }
Dit is een functie die een int
(een umber), dus je zou het zo noemen:
void setup() { int number = theMeaningOfLife(); }
Er is één probleem, de functie moet worden gedeclareerd VOORDAT het wordt gebruikt, dit stelt de compiler in staat om weet waar u naar verwijst. De eenvoudigste manier om dit te doen, is door de functie boven de functie te schrijven die deze aanroept. De tweede manier is om gewoon de handtekening van de functie boven de functie te schrijven die deze gebruikt, dwz:
int theMeaningOfLife(void); void setup() { int number = theMeaningOfLife(); }
De beste manier (maar niet altijd praktisch op een Arduino ) is om alle functie-declaraties in een header-bestand (.h) en de code in een .cpp-bestand te hebben. (Bekijk een bibliotheek om te zien wat ik bedoel).
Samenvatting
Er is maar één functie die herhaaldelijk wordt aangeroepen en dat is de loop
-functie. Alleen omdat een functie void retourneert, wil dat nog niet zeggen dat het herhaaldelijk wordt herhaald.
Commentaren
- Je schreef: “ de functie moet worden gedeclareerd VOORDAT deze wordt gebruikt ”. Eigenlijk voert de Arduino IDE uw code door een voorbewerkingsstap die dat voor u doet, wat betekent dat u dit niet hoeft zelf te doen. Ik zou nog steeds een goede praktijk overwegen om me aan deze regel te houden, al was het maar omdat het de code compileerbaar maakt buiten de IDE, bijv. met een Makefile .
- @EdgarBonet – Bedankt, dat heb ik nooit geweten. Ik denk dat ik het echter moet vergeten, anders ' begin ik het op het werk te proberen en uiteindelijk trek ik mijn haar uit en probeer ik erachter te komen waarom [het] heeft gewonnen ' t compileren. 🙂