было бы желательно иметь возможность создать именованный радиоприемник и определить, какой адрес I2C он будет обслуживать. Для простоты неплохо было бы иметь на выбор два варианта: первый, с использованием адреса по умолчанию 0x60, и второй, позволяющий определять нестандартный адрес:

#include <TEA5767Radio.h>

TEA5767Radio radio = TEA5767Radio();

// или TEA5767Radio radio = TEA5767Radio(0x60);

Поскольку библиотека обслуживает УКВ-радиоприемник, она должна уметь настраивать частоту, то есть пользователь должен иметь возможность написать такой код:

radio.setFrequency(93.0);

Числовой параметр здесь представляет частоту в мегагерцах. Автор скетча хотел бы задавать частоту именно в таком виде, а не в малопонятном формате int, который передается аппаратному модулю. Библиотека должна скрывать технические детали и самостоятельно выполнять необходимые преобразования.

Это все, что касается проектирования данной библиотеки. Теперь приступим к созданию кода.

Заголовочный файл

Обычно программный код библиотеки хранится в двух файлах. Один из них называется заголовочным и имеет расширение .h. Этот файл будет указываться в скетчах в инструкции #include. Заголовочный файл не содержит выполняемого программного кода, он лишь определяет имена классов и методов в библиотеке. Далее приводится заголовочный файл примера библиотеки:

#include <Wire.h>

#ifndef TEA5767Radio_h

#define TEA5767Radio_h

class TEA5767Radio

{

private:

int _address;

public:

  TEA5767Radio();

  TEA5767Radio(int address);

  void setFrequency(float frequency);

};

#endif

Команда #ifndef предотвращает многократное импортирование библиотеки и представляет стандартный прием для заголовочных файлов.

Далее следует определение класса, который имеет приватный (private) раздел с единственной переменной _address. Эта переменная хранит адрес I2C устройства.

Общедоступный раздел (public) включает две функции для создания объекта-радиоприемника, одна позволяет указать адрес устройства, а другая не позволяет и использует адрес по умолчанию. В общедоступном разделе имеется также функция setFrequncy.

Файл реализации

Код, фактически реализующий функции, находится в файле TEA5767Radio.cpp:

#include <Arduino.h>

#include <TEA5767Radio.h>

TEA5767Radio::TEA5767Radio(int address)

{

  _address = address;

}

TEA5767Radio::TEA5767Radio()

{

  _address = 0x60;

}

void TEA5767Radio::setFrequency(float frequency)

{

       unsigned int frequencyB = 4 * (frequency *

         1000000 + 225000) / 32768;

       byte frequencyH = frequencyB >> 8;

       byte frequencyL = frequencyB & 0XFF;

       Wire.beginTransmission(_address);

       Wire.write(frequencyH);

       Wire.write(frequencyL);

       Wire.write(0xB0);

       Wire.write(0x10);

       Wire.write(0x00);

       Wire.endTransmission();

       delay(100);

}

Создают новый объект радиоприемника два метода. Оба просто записывают в переменную _address адрес I2C устройства, либо переданный в параметре address, либо адрес по умолчанию 0x60. Метод setFrequency содержит почти весь код из оригинального скетча (sketch_07_01_I2C_TEA5767), кроме следующей строки, использующей значение переменной _address, чтобы соединиться с устройством I2C:

Wire.beginTransmission(_address);

Файл с ключевыми словами

Папка с библиотекой может также содержать файл с именем keywords.txt. Этот файл не является обязательным, библиотека будет работать и без него. Но этот файл позволяет среде разработки Arduino IDE выделять цветом любые ключевые слова библиотеки. В нашей библиотеке только два таких слова: ее имя TEA5767Radio и имя метода setFrequency. Файл с ключевыми словами может сдержать комментарии в строках, начинающихся с символа #. Далее приводится содержимое этого файла:

#######################################

# Карта подсветки синтаксиса для TEA5767Radio

#######################################

#######################################

# Типы данных (KEYWORD1)

#######################################

TEA5767Radio KEYWORD1

#######################################

# Методы и функции (KEYWORD2)

#######################################

setFrequency KEYWORD2

Ключевые слова должны определяться как KEYWORD1 или KEYWORD2, даже при том что версия 1.4 среды разработки Arduino IDE выделяет ключевые слова обоих типов оранжевым цветом.

Папка с примерами

Если внутри папки библиотеки создать папку с именем examples, все скетчи в этой папке автоматически будут регистрироваться средой разработки Arduino IDE во время запуска, и вы сможете получить доступ к ним через меню Examples (Примеры) в подменю с именем библиотеки. Примеры скетчей могут быть самыми обычными скетчами, только хранящимися в папке библиотеки. Далее приводится пример использования этой библиотеки:

#include <Wire.h>

#include <TEA5767Radio.h>

TEA5767Radio radio = TEA5767Radio();

void setup()

{

  Wire.begin();

  radio.setFrequency(93.0); // выберите свою частоту

}

void loop()

{

}

Тестирование библиотеки

Чтобы протестировать библиотеку, достаточно запустить пример скетча, использующего библиотеку. Если вам не повезло (или вы были недостаточно внимательны) и первая попытка скомпилировать библиотеку завершилась неудачей, прочитайте сообщения об ошибках в информационной области в нижней части окна Arduino IDE.

Выпуск библиотеки

Созданную библиотеку можно передать сообществу. Чтобы другие наверняка могли найти ее, создайте запись на общедоступной вики-странице http://playground.arduino.cc//Main/LibraryList. Библиотеку можно распространять в виде zip-архива, но некоторые предпочитают использовать репозитории на сайтах GitHub, Google Code или других и размещать на вики-странице ссылку на сайт хостинга.

Если вы пожелаете выгрузить свою библиотеку на сайт Arduino Playground, выполните следующие шаги.

1. Протестируйте библиотеку, чтобы убедиться в ее безупречной работе.

2. Создайте zip-архив с папкой библиотеки и дайте ему имя, совпадающее с именем класса, но с расширением .zip.

3. Зарегистрируйтесь на сайте www.arduino.cc.

4. Добавьте запись на вики-странице Arduino Playground http://playground.arduino.cc//Main/LibraryList, описывающую библиотеку и порядок ее использования. Посмотрите, как оформлены записи для других библиотек, и скопируйте соответствующие фрагменты вики-разметки. Создайте ссылку, используя, например, текст [[TEA5767Radio]], чтобы создать заполнитель для новой страницы, который появится в списке библиотек в сопровождении знака ?. Щелкните на ссылке, чтобы создать новую страницу и открыть ее в вики-редакторе. Скопируйте вики-код из записи для другой библиотеки (например, TEA5767Radio) и приведите его в соответствие со своей библиотекой.

5. Чтобы выгрузить zip-архив с библиотекой, нужно включить в вики-разметку вкладку, такую как Attach:TEA5767Radio.zip. Сохранив страницу, щелкните на ссылке download (загрузить) и укажите имя zip-архива для выгрузки на вики-сервер.

В заключение

Создание библиотек — весьма похвальное занятие. Но прежде чем приступать к созданию какой-либо библиотеки, всегда проверяйте, не была ли создана подобная библиотека кем-то другим.

Книги по своей природе не в состоянии охватить все, что хотел бы узнать читатель. Но я надеюсь, что эта книга помогла вам разобраться в некоторых вопросах программирования Arduino.

Заходите ко мне в Twitter, где я зарегистрирован как @simonmonk2. Кроме того, подробную информацию об этой и других моих книгах можно найти на моем веб-сайте www.simonmonk.org.

Приложение. Компоненты

Эта книга посвящена в основном программированию, но в ней упоминаются и электронные компоненты, пусть их не так уж много. В этом приложении перечисляются компоненты, использовавшиеся в примерах, и некоторые возможные поставщики, у которых можно их приобрести.

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату