Arduino: как поделить скетч на модули |
![]() |
Добавил(а) microsin |
По умолчанию проект 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. В нашем примере файл EEPROMrw.cpp может содержать следующий код: #include "EEPROMrw.h"
unsigned char ReadFrom24C04(unsigned char addr) { int data; Wire.beginTransmission(0x50); Wire.write(addr); Wire.endTransmission(); delay(5); Wire.requestFrom(0x50,1); delay(10); if(Wire.available()) { data = Wire.read(); } return data; } void WriteTo24C04(unsigned char addr, unsigned char data) { Wire.beginTransmission(0x50); Wire.write(addr); Wire.write(data); Wire.endTransmission(); } Обратите внимание, что в начале модуля есть строчка с оператором #include, она подключает заголовочный файл EEPROMrw.h. В этом заголовочном файле будут находиться прототипы функций модуля EEPROMrw.cpp. 3. Создайте новый файл с таким же именем, что и имя нового модуля, но с расширением *.h. Для нашего примера получится файл с именем EEPROMrw.h. В файле EEPROMrw.h может содержаться такой текст: #include < Wire.h> // библиотека шины I2C для EEPROM 24LC04 unsigned char ReadFrom24C04(unsigned char addr); void WriteTo24C04(unsigned char addr, unsigned char data); В результате в папке проекта будет находиться ino-файл, и два новых файла EEPROMrw.cpp и EEPROMrw.h: имяпроекта\имяпроекта.ino 4. Добавьте в начало ino-файла оператор #include для подключения нашего заголовка: #include "EEPROMrw.h"
5. Скомпилируйте проект (Ctrl+R). Система Arduino IDE обработает как код из файла имяпроекта.ino, так и из файла EEPROMrw.cpp. В папке проекта может быть произвольное количество модулей исходного кода с расширением *.cpp и соответствующих заголовочных файлов *.h, все они будут нормально компилироваться, как будто это единственный файл с расширением *.ino. Такой способ организации кода в проекте дает нам следующие преимущества: • Отлаженные куски кода можно прятать в отдельные файлы, в результате чего основной код в файле *.ino упрощается, в нем проще ориентироваться, работать становится намного легче. На аналогичном принципе основано использование библиотек Arduino (библиотеки Serial, Wire и т. д.). [Ссылки] 1. Arduino: что там внутри? (FAQ). |