Программирование Arduino — создание своей библиотеки


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 и видим, доступность нашего примера 🙂

Замечательно! Заготовка для нашей робототехнической библиотеки создана! 🙂

скачать библиотеку

Ссылки
Как сделать библиотеку для Arduino?

По теме
Как адаптировать библиотеки для Arduino 1.0


0 комментариев на «“Программирование Arduino — создание своей библиотеки”»

  1. А как подключить библиотеку к библиотеке?
    Вот мне нужно к моей библиотеке подцепить SPI.h, но не получается.
    Когда пытаюсь прицепить к своему классу SPIClass (в private), выдается ошибка error: ‘SPIClass’ does not name a type.
    Что делать?

  2. Дабрый день. Подскажите, пожалуйста.

    У меня в программе вместо Русских букв одни квадратики.
    И в порт ничего не выводится.

    Компиляция проходит без ошибок. До этого считывал датчик температуры через порт. Работает нормально.

    • Arduino IDE используется в качестве кодировки UTF-8, которую пока не поддерживает монитор последовательного порта.
      см. Arduino and UTF-8 — там же смотрите ссылку на функцию конвертирования строк в UTF8 в расширенную кодировку ASCII — Utf8ascii.

  3. Здравствуйте, не выводятся сообщения, нужно инициализировать порт в блоке Setup, в рамках конструктора он не хочет работать, библиотеку скачал как есть, версия Arduino IDE 1.8.7

    • Да — на новой версии IDE — не работает. Лучше всего создать метод init() в котором делать все инициализации. А вызов этого метода явным образом делать в setup()

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение