Pull to refresh

Как сделать библиотеку для Arduino? (пример прилагается)

Reading time 2 min
Views 40K
Допустим, Вы решили оформить написанные Вами функции/классы для Arduino в библиотеку, чтобы Вам самим было проще с ними работать, и главное, чтобы кто-то другой мог с помощью Вашей библиотеки спокойно решать данные задачи, поминая Вас добрым словом, а не выдумывать новый велосипед.
Опишу минимум особенностей, в расчете на читателя, хотя бы немного знакомого с программированием на C/C++.
Библиотека должна иметь как минимум один .h файл и как правило, один .cpp файл. В .h файле, как водится, описываются все типы/функции/классы/константы, а в .cpp все это реализуется.
Библиотека будет компилироваться без дополнительных преобразований (подробнее тут), поэтому, если Вам потребуются какие-то функции/объекты/константы из стандартной библиотеки Arduino, нужно подключать соответствующие заголовочные файлы (вроде «WConstants.h», «WProgram.h»).
Если я верно понял, правилом «хорошего тона» является оформление кода в виде класса, и если по смыслу выполняемых задач экземпляр этого класса может быть только один, то заодно и объявление этого экземпляра в .h файле:
extern MyClass MyClassObject;
и создание одного глобального объекта в .cpp файле:
MyClass MyClassObject;
Например, если мы делаем класс для работы с аппаратным последовательным портом, то поскольку такой порт физически только один, то желательно в самой библиотеке экземпляр класса и создать. Собственно, в стандартной библиотеке объект Serial так и объявлен.
Написанную библиотеку нужно положить в папку с каким-нибудь подходящим именем в каталог «hardware\libraries», и перезапустить среду Arduino. При запуске среда попытается скомпилировать Вашу библиотеку, и если возникнут ошибки, о них будет сказано.
Неплохо создать в папке с библиотекой файл «keywords.txt», в котором описываются имена типов, методов, функций, констант, используемых в библиотеке, чтобы редактор «раскрашивал» их соответствующими цветами. Синтаксис у файла простой — вот пример (разделитель — TAB):
--- keywords.txt ---
MyType	KEYWORD1
MyFunction	KEYWORD2
MY_CONSTANT	LITERAL1
---
Кроме того, можно создать папку «examples», куда сложить одну или несколько папок с проектами примеров работы с библиотекой (уже в формате .pde).
В качестве примера приведу простенькую библиотечку, которая организует ввод чисел с последовательного порта.
В ходе экспериментов с Arduino бывает удобно написать программку в диалоговой форме, и работать с ней через терминалку (ту же HyperTerminal). Ну и постоянно встает задача ввода чисел — этим библиотека и занимается. Работают с библиотекой примерно так:
#include <SerialInput.h>

void setup() {
  Serial.begin(9600);
}

void loop()
{
  long int Number;

  Serial.print("Enter number: ");
  Number = SerialInput.InputNumber();	// Здесь ввод и происходит

  Serial.print("You entered: ");
  Serial.println(Number, DEC);
}
Более полный пример идет с библиотекой, скачать которую можно тут: SerialInput.zip Архив разархивировать в папку «hardware\libraries».
Tags:
Hubs:
+5
Comments 7
Comments Comments 7

Articles