I Espero que esta sea una simple solicitud de un recién llegado a Arduino y a la programación. Tengo entendido que una vez que un programa entra en una sección de bucle vacío, se repite indefinidamente. Sin embargo, recientemente he visto ejemplos de bocetos en los que otra sección vacía $$$$$ sigue al cierre (por}) del bucle vacío. Mientras escribo esto, estoy mirando un ejemplo sobre una pantalla de 7 segmentos donde «void Num_Write (int)» sigue al cierre del bucle vacío. Si la sección «bucle» hace precisamente eso, como me han hecho creer, ¿cómo se accede a la siguiente sección?
Gracias, Rob
Comentarios
- Al llamarlo. tutorialspoint.com/cplusplus/cpp_functions.htm
- También se ' s Referencia de Arduino: arduino.cc/en/Reference/FunctionDeclaration
- Para colmo: cplusplus.com/doc/tutorial/functions
Responder
El void loop()
sección es una función, al igual que void setup()
es una función. Cuando inicie su programa Arduino, otra función, que no puede ver en el IDE, llame a setup()
y luego llame a loop()
repetidamente.
Estas otras funciones que ha visto, es decir, void Num_Write(int n)
se pueden llamar desde setup()
o loop()
y ejecutarán sus instrucciones antes de regresar a la función que los llamó. También es posible que Num_Write()
pueda llamar a otras funciones antes de que devuelva el controlador a la función que llamó
El tipo void
se usa para representar nada (en realidad es más complejo que eso, pero para este nivel de explicación, nada servirá). Otras funciones pueden devolver otros tipos int
, char
, bool
por ejemplo. Entonces, si tuviéramos una función así:
int theMeaningOfLife(void) { return 42; }
Esta es una función que devuelve un int
(un umber) por lo que lo llamaría así:
void setup() { int number = theMeaningOfLife(); }
Hay un problema, la función debe declararse ANTES de que se use, esto permite que el compilador sepa a qué se refiere. La forma más sencilla de hacer esto es escribir la función encima de la función que la está llamando. La segunda forma es simplemente escribir la firma de la función encima de la función que la usa, es decir:
int theMeaningOfLife(void); void setup() { int number = theMeaningOfLife(); }
La mejor forma (pero no siempre práctica en un Arduino ) es tener todas las declaraciones de funciones en un archivo de encabezado (.h) y el código en un archivo .cpp. (Eche un vistazo a una biblioteca para ver lo que quiero decir).
Resumen
Solo hay una función que se llama repetidamente y es la loop
función. El hecho de que una función devuelva vacío no significa que vaya a repetirse repetidamente.
Comentarios
- Usted escribió: “ la función debe declararse ANTES de que se utilice ”. En realidad, el IDE de Arduino ejecuta su código a través de un paso de preprocesamiento que lo hace por usted, lo que significa que usted no tiene que hacerlo usted mismo. Todavía consideraría una buena práctica seguir esta regla, aunque solo sea porque hace que el código sea compilable fuera del IDE, p. con un Makefile .
- @EdgarBonet – Gracias, nunca supe eso. Sin embargo, creo que debería olvidarlo; de lo contrario, ' empezaré a probarlo en el trabajo y terminaré tirándome de los pelos tratando de averiguar por qué [ganó] ' t compilar. 🙂