CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

Программирование 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
  • +2
  • 26 октября 2009, 12:45
  • admin

Комментарии (4)

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

pakhontas

  • 24 августа 2012, 12:23
+
0
Дабрый день. Подскажите, пожалуйста.

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

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

serg-rider

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

admin

  • 16 декабря 2016, 12:47

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.