Dlaczego plik `.ino` musi znajdować się w folderze o tej samej nazwie?

12

Próbuję zorganizować bardzo skomplikowany projekt i chcę umieścić cały rzeczywisty kod w folderze o nazwie src(źródło), ale chcę zachować główny .inoplik jako main.ino(będzie również w nim src). Następnie, gdy próbuję otworzyć kod, IDE mówi, że main.inomusi on znajdować się w folderze o nazwie main.

Dlaczego to?

W pełni rozumiem komunikat o błędzie, ale dlaczego tak musi być nazwa pliku w Arduino. Czy istnieje sposób, aby to zmienić?

Dat Ha
źródło

Odpowiedzi:

6

AFAIK, to dziwactwo wbudowane w Arduino IDE. Najlepszym obejściem, jakie mogę wymyślić, jest struktura plików podobna do:

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

, gdzie myproj.cpp jest po prostu main.cpp #include. Powinno to pozostawić pliki projektu „czyste”, tak aby działały również w bardziej typowym środowisku.

Aktualizacja:

Pożyczyłem nazwę „main” z twojego pytania, ale po zastanowieniu „main” jest nazwą zastrzeżoną, w szczególności, każdy program C lub C ++ ma main.c lub main.cpp jako kod najwyższego poziomu, dostarczany przez system, jeśli nie zapewniasz jednego. Dlatego uniknąłem używania go jako nazwy folderu i projektu (ale spróbuj tego) i zaktualizowałem schemat. Potrzebujesz folderu projektu i pliku .ino o tej samej nazwie. Plik .ino może

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

, np. plik kodu najwyższego poziomu, pobierając w ten sposób wszystko inne. Możesz potrzebować swojego .ino do #includekażdego z plików w srcfolderze, jeśli kompilator sam nie zorientuje się , że tam są twoje inne pliki.

BTW, jeśli użyjesz nazwy main.cpp dla swojego górnego pliku, będzie musiał wywołać funkcje setup () i loop () (oraz funkcję zdarzenia szeregowego, jeśli go użyjesz). Prawdopodobnie najlepiej pozostawić nazwę „main” w spokoju, niech system zapewnia tę samą nazwę główną dla każdego programu Arduino, który dostaje domyślnie, i napisz kod projektu w typowy sposób Arduino - zaczynając od setup () i loop ().

JRobert
źródło
myproj.cppmasz na myśli myproj.ino? Ponieważ nie widzę gdzie myproj.cppjest!
Dat Ha
Ok, mały problem, jeśli to zrobię, niektóre podstawowe funkcje Arduino (takie jak map () i analogRead ()) zawarte w sensor.cpp nie zostaną rozpoznane przez kompilator.
Dat Ha
Alternatywnie, jeśli pracujesz na Windowsie, użyj polecenia junction i „połącz” katalog o poprawnej nazwie z katalogiem o lepszej nazwie. Lub, jeśli pracujesz na Linux-ie, użyj polecenia link symboliczny, aby zrobić to samo.
st2000
(Zobacz moją aktualizację - plik .ino może zawierać inne pliki).
JRobert,
3

Kiedy masz projekt złożony z wielu .INOplików, skąd IDE powinno wiedzieć, który jest „główny”? Podczas kompilacji IDE łączy wszystkie .INOpliki w jeden plik monolityczny. Robi to zaczynając od „głównego”, a następnie dołącza każdy z pozostałych alfabetycznie do końca.

Odbywa się to w ten sposób, aby zmienne globalne i globalne, które powinieneś umieścić w .INOpliku „głównym” , znajdowały się na początku gotowego programu.

Aby to zrobić, IDE musi wiedzieć, który z plików jest „główny”. Sposób, w jaki to działa, polega na znalezieniu tego, który ma taką samą nazwę jak folder, w którym znajduje się szkic.

W UECIDE posuwam się o krok dalej i przekształcam cały folder w złożony dokument , abyś nie musiał już wchodzić do folderu i otwierać .INOpliku, aby otworzyć szkic - sam folder jest całym projektem szkicu. Ponownie ten rodzaj folderu jest identyfikowany jako zawierający .INOplik o nazwie takiej samej jak folder.

Majenko
źródło