Очень часто одни и те же части кода кочуют из программы в программу. Например, код для работы с датчиком. Чтобы не писать этот код каждый раз заново, его выносят в отдельные файлы — библиотеки. Огромное количество готового кода уже написано другими людьми, и с помощью библиотек его можно легко использовать в своих программах.
Подключение библиотек
Библиотеки в составе 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)); } }