По умолчанию проект Arduino состоит из единственного файла с расширением *.ino и одноименной папки. В файле *.ino находится весь основной код приложения:
имяпроекта\имяпроекта.ino
По мере усложнения проекта ino-файл становится громоздким, в нем бывает сложно ориентироваться. Появляются участки кода, которые отлажены и уже не изменяются, и возникает желание убрать этот код в отдельные файлы - модули исходного кода.
Поделить проект Arduino на отдельные модули довольно просто. Достаточно в папке проекта создать файл с расширением имямодуля1.cpp и заголовочный файл имямодуля1.h, и перетащить туда из файла *.ino необходимый код. После этого система Arduino IDE будет автоматически компилировать код как из файла *.ino, так и из файла имямодуля1.cpp.
Предположим, у Вас есть файл *.ino, в котором находятся две функции чтения и записи микросхемы EEPROM. Убрать их код в отдельный модуль можно следующим способом, процесс по шагам:
1. Создайте в папке проекта текстовый файл для исходного кода с расширением *.cpp. Этому файлу можно дать произвольное имя. Основной принцип - имя должно быть понятным, не слишком длинным, и должно отражать назначение кода, который в нем находится. В нашем примере это код для чтения EEPROM, поэтому дадим ему имя EEPROMrw.cpp.
2. Методом Cut/Paste перенесите код для EEPROM из файла *.ino в файл EEPROMrw.cpp.
Обратите внимание, что в начале модуля есть строчка с оператором #include, она подключает заголовочный файл EEPROMrw.h. В этом заголовочном файле будут находиться прототипы функций модуля EEPROMrw.cpp.
3. Создайте новый файл с таким же именем, что и имя нового модуля, но с расширением *.h. Для нашего примера получится файл с именем EEPROMrw.h.
4. Добавьте в начало ino-файла оператор #include для подключения нашего заголовка:
#include "EEPROMrw.h"
5. Скомпилируйте проект (Ctrl+R). Система Arduino IDE обработает как код из файла имяпроекта.ino, так и из файла EEPROMrw.cpp.
В папке проекта может быть произвольное количество модулей исходного кода с расширением *.cpp и соответствующих заголовочных файлов *.h, все они будут нормально компилироваться, как будто это единственный файл с расширением *.ino.
Такой способ организации кода в проекте дает нам следующие преимущества:
• Отлаженные куски кода можно прятать в отдельные файлы, в результате чего основной код в файле *.ino упрощается, в нем проще ориентироваться, работать становится намного легче. На аналогичном принципе основано использование библиотек Arduino (библиотеки Serial, Wire и т. д.). • В отдельные модули и заголовки можно убрать глобальные переменные и определения #define, определения типов. Некоторые переменные можно сделать вовсе локальными для модуля (static). Это также облегчает понимание кода и его поддержку.