Разделить код Arduino на несколько файлов с помощью Arduino IDE

Я работаю над очень длинным кодом, который требует определения нескольких функций. Я хочу разделить код на два файла: основной код ("Feeder_Control" на скриншоте) и функции ("соединения" на скриншоте) Как импортировать второй файл в основной код, чтобы использовать его функции?

PS: В C/C++ то же самое делается с #include "connections.h". Как это делается в Arduino IDE.

look here.

, 👍16

Обсуждение

Хотя общепринятый ответ работает, я чувствую, что Arduino "IDE" отлично подходит для начинающих, но он не очень масштабируется дальше пары файлов. Я настоятельно рекомендую проверить [platformio](https://platformio.org) так как он обеспечивает гораздо лучшее управление проектами за счет интеграции с [atom](https://atom...io) и [vscode](https://code.visualstudio.com), позволяет работать с различными фреймворками, включая Arduino for AVR, STM32, ESP8266, ESP32 и т.д., а также поддерживает отладку, если у вас есть необходимое оборудование., @Shreyas Murali

[Не пересекайте столб.](https://meta.stackexchange.com/q/64068) Вы уже [спрашивали об этом ТАК](https://stackoverflow.com/q/54194083)., @gre_gor


2 ответа


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

23

Нет необходимости использовать директиву #include для дополнительного файла .ino.

Перед началом компиляции Arduino IDE объединяет все файлы .ino в вашем скетче в один файл, начиная с файла .ino, который соответствует имени папки sketch, а затем остальные файлы .ino в алфавитном порядке. Таким образом, нет никакой разницы между одним массивным файлом .ino и взломом одного и того же кода среди нескольких файлов .ino, кроме большей простоты навигации по коду с помощью вкладок. После небольшой дополнительной обработки этот файл компилируется как C++.

Ссылка: https://arduino.github.io/arduino-cli/latest/sketch-build-process/#pre-processing

,

0

Два комментария для ответа от per1234 (хотя и старые): В проекте может быть несколько файлов .ino. Однако:

  1. Нельзя отделять часть препроцессора от основного файла (файла с именем проекта), который должен включать ВСЮ предварительную обработку.
  2. Arduino IDE компилирует все файлы проекта в определенном порядке (в алфавитном порядке по имени файла) и включает их в основной файл .ino на этапе компоновки. Код в более поздних файлах .ino может получать доступ к переменным и функциям, определенным в более ранних файлах, но не наоборот.
,

Пожалуйста, дайте ссылку на ответ и/или укажите, кто его опубликовал, а не говорите "ответ №1" - порядок ответов меняется со временем и в зависимости от выбранного типа порядка. Пожалуйста, [редактируйте] и обновите свой ответ., @Greenonline

подробности, которые вы упомянули, находятся на связанной странице. per1234 — тестер Arduino CLI в Arduino и основной автор документации Arduino CLI, включая связанную страницу., @Juraj

что там с препроцессором? такого ограничения нет., @Juraj

>Код в более поздних файлах .ino может получать доступ к переменным и функциям, определенным в более ранних, но не наоборот Это верно для переменных, но не для функций: при объединении всех файлов .ino в один .cpp прототипы функций из всех файлов .ino генерируются и добавляются в начало этого файла .cpp. Если это работает хорошо, все функции можно использовать из любой части кода. И хорошей идеей будет собрать все глобальные переменные в файле projectname.ino, который идет первым в объединении .cpp., @DataFiddler

Спасибо за подробности. Но у меня есть основной файл и в нем большая часть кода вывода HTML (или CSS). Эта часть HTML в настоящее время находится в корне основного файла. Я хочу переместить ее в отдельный файл, но она не определена как функция Arduino, и поэтому у нее нет функции-прототипа, и она не будет связана. Могу ли я определить это как функцию? Как лучше всего поступить? Спасибо, @samtal

_Могу ли я определить его как функцию? Как лучше поступить?_ вопрос зависит от того, какие файлы и данные находятся в одной единице трансляции. Также есть спецификатор класса хранения extern, который можно использовать, чтобы сообщить компилятору, что переменная определена внешне в другой единице трансляции., @hcheung