Por que um arquivo `.ino` precisa estar em uma pasta com o mesmo nome?

12

Estou tentando organizar um projeto muito complicado e quero colocar todo o código real em uma pasta chamada src(fonte), mas quero manter o .inoarquivo principal como main.ino(ele também estará src). Então, quando tento abrir o código, o IDE diz que main.inodeve estar em uma pasta chamada main.

Por que é isso?

Entendo perfeitamente a mensagem de erro, mas por que o nome do arquivo no Arduino precisa ser assim? Existe uma maneira de mudar isso?

Dat Ha
fonte

Respostas:

6

AFAIK, que é uma peculiaridade incorporada ao IDE do Arduino. A melhor solução que posso pensar é em uma estrutura de arquivos, algo como:

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

, onde myproj.cpp é apenas #includemain.cpp. Isso deve deixar os arquivos do projeto "limpos", para que também funcionem em um ambiente mais típico.

Atualizar:

Peguei emprestado o nome "main" da sua pergunta, mas, refletindo, "main" é um nome reservado, especificamente, todo programa em C ou C ++ tem um main.c ou main.cpp como código de nível superior, fornecido pelo sistema se você não fornece um. Portanto, evitei usá-lo como nome da pasta e do projeto (mas fique à vontade para experimentá-lo) e atualizei o diagrama. O que você precisa é de uma pasta do projeto e um arquivo .ino, com o mesmo nome. O arquivo .ino pode

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

, por exemplo, seu arquivo de código de nível superior, puxando todo o resto. Você pode precisar do seu .ino para #includecada um dos arquivos da srcpasta, se o compilador não descobrir por si só, é aí que estão os outros arquivos.

BTW, se você usar o nome main.cpp para o seu arquivo principal, ele precisará chamar as funções setup () e loop () (e a função de evento serial, se você usá-lo). Provavelmente é melhor deixar o nome 'main' sozinho, deixar o sistema fornecer o mesmo main todos os programas do Arduino, por padrão, e escrever o código do seu projeto da maneira típica do Arduino - começando com setup () e loop ().

JRobert
fonte
myproj.cppvocê quer dizer myproj.ino? Porque eu não vejo onde myproj.cppestá!
Dat Ha
Ok, pequeno problema, se eu fizer isso, algumas funções básicas do Arduino (como map () e analogRead ()) que estão contidas no sensor.cpp não serão reconhecidas pelo compilador.
Dat Ha
Como alternativa, se estiver trabalhando em uma caixa do Windows, use o comando junction e "vincule" um diretório de nome corretamente ao diretório com o melhor nome. Ou, se estiver trabalhando em uma caixa Linux, use o comando de link simbólico para fazer o mesmo.
ST2000
(Veja minha atualização - seu arquivo .ino pode ter que incluir cada um dos outros arquivos).
JRobert
3

Quando você tem um projeto composto por vários .INOarquivos, como o IDE deve saber qual é o "principal"? Durante a compilação, o IDE concatena todos os .INOarquivos juntos em um arquivo monolítico. Faz isso começando com o "principal" e, em seguida, acrescenta cada um dos outros em ordem alfabética ao final.

Isso é feito dessa maneira para que suas variáveis ​​globais e inclusas, que você deve colocar no .INOarquivo "principal" , estejam no início do programa finalizado.

Para fazer isso, o IDE precisa saber qual dos arquivos é o "principal". E a maneira como isso funciona é encontrar aquele que tem o mesmo nome da pasta em que o esboço está.

No UECIDE, dou um passo adiante e transformo a pasta inteira em um documento composto, para que você não precise mais entrar em uma pasta e abrir um .INOarquivo para abrir um esboço - a própria pasta é o projeto inteiro do esboço. Novamente, esse tipo de pasta é identificado como tendo um .INOarquivo com o mesmo nome da pasta.

Majenko
fonte