Библиотеки

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

Подключение библиотек

Библиотеки в составе Arduino IDE

Очень много библиотек идет в составе Arduino IDE. Добавить библиотеку в свой код можно из меню Эскиз Импорт библиотек… Название библиотеки :

После выбора пункта «Servo» Arduino IDE сама вставит в код нужные строчки:

#include <Servo.h>
 
void setup() {
  // установочный код, выполняется один раз
}
 
void loop() {
  // основной код, выполняется циклично после установочного кода
}

Конечно, если вы знаете название нужной библиотеки, можно просто написать в самом верху скетча #include <Servo.h> — результат будет тем же самым.

Чтобы посмотреть пример работы с библиотекой, идущей в составе Arduino IDE необходимо выбрать в меню Файл Образцы Название библиотеки Название примера

Сторонние библиотеки

Библиотек для Arduino действительно очень много. И только незначительная часть из них входит в состав Arduino IDE. Многие библиотеки можно найти на сайте GitHub.

Давайте попробуем добавить в свой проект библиотеку для работы с четырёхразрядным индикатором. Ссылка на библиотеку для работы с ним есть на странице описания товара. Если зайти на страницу библиотеки, можно увидеть множество файлов библиотеки и примеры работы с ней. Но нас пока будет интересовать только кнопка Download ZIP: После нажатия на неё начнётся загрузка .zip-архива со всеми файлами библиотеки. В данном случае это будет файл QuadDisplay-master.zip. Название библиотеки может состоять только из латинских букв и цифр, при этом название не может начинаться с цифры, поэтому давайте сразу переименуем наш архив. Теперь он будет называться QuadDisplay.zip.

После загрузки архива нужно зайти в Arduino IDE и выполнить импорт библиотеки в вашу рабочую папку Sketchbook/libraries, в которой должны находится все сторонние библиотеки. Сделать это можно прямо из Arduino IDE, в меню Эскиз Импорт библиотек… Добавить библиотеку… : Откроется диалоговое окно, в котором необходимо выбрать наш архив QuadDisplay.zip и нажать кнопку Open. Готово. Теперь библиотеки можно добавлять в код. Примеры работы с библиотекой доступны в меню Файл Sketchbook libraries Название библиотеки Название примера

В Arduino 1.6.7 и выше: Файл Примеры Название библиотеки Название примера

Создание библиотеки

Обычно, при создании библиотеки создаются два файла: заголовочный файл и файл с кодом библиотеки. Давайте попробуем написать библиотеку, которая бы позволяла нам посчитать площадь круга. Создадим в директории %Sketchbook%\Arduino\libraries папку с названием нашей библиотеки (название может состоять только из латинских букв и цифр, при этом не может начинаться с цифры). Давайте назовём нашу библиотеку circleArea. Перейдём в созданную нами папку %Sketchbook%\Arduino\libraries\circleArea и создим там два файла:

  • circleArea.h — заголовочный файл
  • circleArea.cpp — файл с кодом библиотеки.

Код circleArea.h будет таким:

circleArea.h
#include <inttypes.h> // пригодится, мы будем использовать числовые типы
 
#define PI 3.14       // два знака после запятой — достаточная точность.
 
//Объявляем нашу библиотечную функцию, ради которой все и затевалось
float circleArea(float radius);

Код circleArea.cpp будет таким:

circleArea.cpp
#include <inttypes.h>   // пригодится, мы будем использовать числовые типы
#include <Arduino.h>    // функцию pow() мы возьмём отсюда
#include <circleArea.h> // в заголовочном файле находится PI и объявление функции
 
//Реализуем нашу библиотечную функцию, ради которой все и затевалось
 
float circleArea(float radius)
{
    return PI*pow(radius, 2);
}

Использование библиотеки в скетче будет таким:

circleArea.ino
#include <circleArea.h>
void setup() {
  // put your setup code here, to run once:
    Serial.begin(9600);
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
    for (int i=1; i<5; ++i ) {
        Serial.print("circle area with radius ");
        Serial.print(i);
        Serial.print(" = ");
        Serial.println(circleArea(i));
    }
}