Какова правильная структура папок для включения локальных заголовков в мой проект Arduino?

Я разрабатываю «проект» с 5 Arduino (каждый с отдельными кодами), которые общаются друг с другом с помощью NRF24. Все 5 кодов различны, за исключением того, что они имеют общий заголовок «MyHeader.h». Arduino IDE заставляет имя файла .ino совпадать с именем папки, в которой он находится. В настоящее время у меня есть следующая структура:

[parentfolder]
    MyHeader.h
    [arduino1]
          arduino1.ino
    [arduino2]
          arduino2.ino
    [arduino3]
          arduino3.ino
    [arduino4]
          arduino4.ino
    [arduino5]
          arduino5.ino

Теперь, если я использую следующее, я получаю сообщение об ошибке, что IDE не может найти заголовочный файл:

#include "../MyHeader.h"

Я вынужден использовать приведенную выше структуру из-за ограничений на имена папок в среде IDE, тогда как мне определенно хотелось бы иметь структуру, подобную следующей:

[parentfolder]
    MyHeader.h
    arduino1.ino
    arduino2.ino
    arduino3.ino
    arduino4.ino
    arduino5.ino

Как мне организовать свой проект, чтобы я мог включить свой заголовок (без явного дублирования файла в каждой папке)? Спасибо.

, 👍0

Обсуждение

проверить https://uecide.org, @jsotola

поместите MyHeader.h в папку Documents/Arduino/libraries/MyHeader, @Juraj

Поддерживает ли ваша файловая система символические ссылки?, @Edgar Bonet


1 ответ


Лучший ответ:

1

Причина, по которой вы не можете ссылаться на родительскую папку вашего скетча при компиляции, заключается в том, что Arduino IDE не компилирует ваш скетч в этой папке. Вместо этого он записывает файлы из самой IDE во временные файлы в папке "build" и компилирует их там, поэтому родительская папка не содержит вашего файла заголовка, потому что IDE не знает об этом.

Поэтому вам нужно поместить файл заголовка туда, о котором IDE действительно знает, и самое простое место — там, где находятся библиотеки.

Библиотека — это не что иное, как заголовочный файл в папке (оба названы одинаково) с необязательным исходным кодом и другими заголовочными файлами. Если вы поместите свой заголовок в папку в папке с библиотеками, IDE увидит его как библиотеку, и вы сможете включить его в любой скетч.

Итак, у вас будет:

Documents/
    Arduino/
        libraries/
            MyHeader/
                MyHeader.h
    MyFancyProject/
        NodeOne/
            NodeOne.ino
        NodeTwo/
            NodeTwo.ino
        NodeThree/
            NodeThree.ino
,