¿Por qué un archivo `.ino` tiene que estar en una carpeta con el mismo nombre?

12

Estoy tratando de organizar un proyecto muy complicado y quiero poner todo el código real en una carpeta llamada src(fuente), pero quiero mantener el .inoarchivo principal como main.ino(también estará en src). Luego, cuando intento abrir el código, el IDE dice que main.inotiene que estar en una carpeta llamada main.

¿Por qué es esto?

Entiendo completamente el mensaje de error, pero ¿por qué el nombre del archivo en Arduino tiene que ser así? ¿Hay alguna manera de cambiar eso?

Dat Ha
fuente

Respuestas:

6

AFAIK, esa es una peculiaridad integrada en el IDE de Arduino. La mejor solución que se me ocurre es una estructura de archivo similar a:

ArduinoWorkspace --- /myproj/ ----+ /src/ --------+ myproj.cpp
                                  + myproj.ino    + sensor.h
                                                  + sensor.cpp
                                                  + (more files)

, donde myproj.cpp solo #includees main.cpp. Esto debería dejar los archivos de su proyecto "limpios", de modo que también deberían funcionar en un entorno más típico.

Actualizar:

Tomé prestado el nombre "main" de su pregunta, pero reflexionando, "main" es un nombre reservado, específicamente, cada programa C o C ++ tiene main.c o main.cpp como su código de nivel superior, proporcionado por el sistema si usted no proporciona uno Así que evité usar eso como nombre de carpeta y proyecto (pero siéntase libre de probarlo) y actualicé el diagrama. Lo que necesita es una carpeta de proyecto y un archivo .ino dentro del mismo nombre. El archivo .ino podría

#include <src/anything-else-you-like>

, p. ej., el archivo de código de nivel superior y, por lo tanto, extraer todo lo demás. Es posible que necesite su .ino para #includecada uno de los archivos en la srccarpeta, si el compilador no se da cuenta por sí solo, ahí es donde están sus otros archivos.

Por cierto, si usa el nombre main.cpp para su archivo superior, tendrá que llamar a las funciones setup () y loop () (y función de evento en serie, si la usa). Probablemente sea mejor dejar solo el nombre 'main', dejar que el sistema proporcione el mismo main que cada programa Arduino obtiene por defecto y escribir el código de su proyecto de la manera típica de Arduino, comenzando con setup () y loop ().

JRobert
fuente
myproj.cpp, Que quiere decir myproj.ino? ¡Porque no veo dónde myproj.cppestá!
Dat Ha
Ok, pequeño problema, si hago esto, algunas funciones básicas de Arduino (como map () y analogRead ()) que están contenidas en sensor.cpp no ​​serán reconocidas por el compilador.
Dat Ha
Alternativamente, si trabaja en un cuadro de Windows, use el comando de unión y "vincule" un directorio de nombre correcto al directorio con el mejor nombre. O, si trabaja en un cuadro de Linux, use el comando de enlace simbólico para hacer lo mismo.
st2000
(Vea mi actualización: su archivo .ino podría tener que incluir cada uno de los otros archivos).
JRobert
3

Cuando tiene un proyecto compuesto por varios .INOarchivos, ¿cómo se supone que el IDE sabe cuál es el "principal"? Durante la compilación, el IDE concatena todos los .INOarchivos en un solo archivo monolítico. Hace esto comenzando con el "principal" y luego agrega cada uno de los otros alfabéticamente hasta el final.

Se hace de esta manera para que sus inclusiones y variables globales, que debe poner en su .INOarchivo "principal" , estén al comienzo del programa terminado.

Para hacer esto, el IDE debe saber cuál de los archivos es el "principal". Y la forma en que funciona es encontrando el que tiene el mismo nombre que la carpeta en la que está el boceto.

En UECIDE , llevo un paso más allá y convierto toda la carpeta en un documento compuesto para que ya no tenga que ingresar una carpeta y abrir un .INOarchivo para abrir un boceto: la carpeta en sí es todo el proyecto de boceto. Una vez más, este tipo de carpeta se identifica como que tiene un .INOarchivo con el mismo nombre que la carpeta.

Majenko
fuente