12. Cоздание своей библиотеки.
На примере библиотеки для работы с PS/2-устройствами можно оценить как здорово работать через библиотеку 🙂
Раз подключил и готово 🙂
Разумеется, нужно ещё разобраться что к чему, но главное – библиотека – это очень удобно 🙂 Поэтому, давайте научимся создавать собственную библиотеку для ардуино 🙂
Как мы помним, ардуина программируется на C++, поэтому, как Вы уже догадались, библиотека – это всего-навсего дополнительный класс, который инкапсулирует в себе функции для работы с устройством 🙂
Т.о. для создания библиотеки нужно будет создать, как минимум, один .h файл в котором будет описываться Ваш класс/функции/ константы и один .cpp, в котором все эти функции реализуются 🙂
Итак, создаём в библиотечной директории Arduino IDE (\hardware\libraries\) папку RoboCraft – так по-скромному будет называться наша библиотека 🙂
Для Arduino IDE 0017 свои библиотеки можно хранить в директории libraries, находящейся в каталоге с пользовательскими скетчами (путь указывается через File — Preferences, строчка Sketchbook location )
А внутри нашей новой директории создаём наши файлы
robocraft.h и robocraft.cpp
Ну что – можно сказать половина дела сделана 🙂
Библиотеки компилируется без дополнительных преобразований, поэтому их нужно писать на «чистом C++» и поэтому если внутри нашей библиотеки мы захотим использовать какие-нибудь функции или объекты из стандартной библиотеки Arduino, то нам нужно подключать соответствующий заголовочный файл («Arduino.h» (в старых версиях IDE: «WConstants.h», «WProgram.h»))
На всякий случай, напишем:
#if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif
код оформляется в виде класса и если по смыслу выполняемых задач экземпляр этого класса может быть только один, то заодно происходит объявление этого экземпляра в .h файле.
Помните, как в классе HardwareSerial – у нас один COM-порт и экземпляр класса там же и объявляется:
extern HardwareSerial Serial;
Пора писать код 🙂
Для начала, напишем что-нибудь простое, вроде обычного в таких случаях “Hello world”-а 🙂
—- robocraft.h —-
#ifndef robocraft_h #define robocraft_h #if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif class RoboCraft { public: RoboCraft(); void hello(); }; #endif // #ifndef robocraft_h
—- robocraft.h end —-
,а теперь реализуем эти функции:
—- robocraft.cpp —-
#include "robocraft.h" // // конструктор - вызывается всегда при создании экземпляра класса RoboCraft // RoboCraft::RoboCraft() { Serial.begin(9600); } // // просто говорим "Hello" :) // void RoboCraft::hello() { Serial.println("Hello :)"); }
—- robocraft.cpp end —-
Остаётся перезапустить Arduino IDE и с удовольствием отметить появление нового класса (меню Sketch – Import Library ) 🙂
При выборе нашего (да и любого другого) класса – всего лишь появляется строчка
#include <robocraft.h>
допишем необходимые setup и loop:
#include <robocraft.h> RoboCraft robot; // создаём экземпляр нашего класса void setup() { } void loop() { robot.hello(); // говорим "Hello" :) }
Пробуем скомпилировать – «Done compiling» — с чем нас и поздравляю – наш класс работает! 🙂
Однако, заглянув в папку к любому другому классу в глаза бросаются файл keywords.txt и директория examples
Попробуем разобраться.
Файл keywords.txt содержит объявления ключевых слов вашей библиотеки, имена типов, методов, функций, констант – это нужно, чтобы редактор “раскрашивал” их соответствующими цветами. Синтаксис у файла простой — вот пример (разделитель — TAB):
####################################### # Syntax Coloring Map For RoboCraft ####################################### ####################################### # Datatypes (KEYWORD1) ####################################### RoboCraft KEYWORD1 ####################################### # Methods and Functions (KEYWORD2) ####################################### hello KEYWORD2 ####################################### # Constants (LITERAL1) #######################################
Сохраним этот keywords.txt в каталог с нашей библиотекой и перезапустим Arduino IDE
— сравните с предыдущим скриншотом – название нашего класса и функция hello() теперь подсвечиваются! 🙂
Теперь остаётся добавить к нашей библиотеке нужных и полезных примеров использования.
Для этого создаём директорию examples, а в ней поддиректории с примерами в формате .pde.
Например, скопируем туда наш скетч в директорию hello_robocraft и переименуем его аналогично в hello_robocraft.pde
В очередной раз перезапускаем Arduino IDE и видим, доступность нашего примера 🙂
Замечательно! Заготовка для нашей робототехнической библиотеки создана! 🙂
скачать библиотеку
0 комментариев на «“Программирование Arduino — создание своей библиотеки”»
А как подключить библиотеку к библиотеке?
Вот мне нужно к моей библиотеке подцепить SPI.h, но не получается.
Когда пытаюсь прицепить к своему классу SPIClass (в private), выдается ошибка error: ‘SPIClass’ does not name a type.
Что делать?
Дабрый день. Подскажите, пожалуйста.
У меня в программе вместо Русских букв одни квадратики.
И в порт ничего не выводится.
Компиляция проходит без ошибок. До этого считывал датчик температуры через порт. Работает нормально.
Arduino IDE используется в качестве кодировки UTF-8, которую пока не поддерживает монитор последовательного порта.Arduino and UTF-8 — там же смотрите ссылку на функцию конвертирования строк в UTF8 в расширенную кодировку ASCII — Utf8ascii .
см.
Здравствуйте, не выводятся сообщения, нужно инициализировать порт в блоке Setup, в рамках конструктора он не хочет работать, библиотеку скачал как есть, версия Arduino IDE 1.8.7
Да — на новой версии IDE — не работает. Лучше всего создать метод init() в котором делать все инициализации. А вызов этого метода явным образом делать в setup()