Как сделать библиотеку для Arduino? (пример прилагается)

    Допустим, Вы решили оформить написанные Вами функции/классы для Arduino в библиотеку, чтобы Вам самим было проще с ними работать, и главное, чтобы кто-то другой мог с помощью Вашей библиотеки спокойно решать данные задачи, поминая Вас добрым словом, а не выдумывать новый велосипед.
    Опишу минимум особенностей, в расчете на читателя, хотя бы немного знакомого с программированием на C/C++.
    Библиотека должна иметь как минимум один .h файл и как правило, один .cpp файл. В .h файле, как водится, описываются все типы/функции/классы/константы, а в .cpp все это реализуется.
    Библиотека будет компилироваться без дополнительных преобразований (подробнее тут), поэтому, если Вам потребуются какие-то функции/объекты/константы из стандартной библиотеки Arduino, нужно подключать соответствующие заголовочные файлы (вроде «WConstants.h», «WProgram.h»).
    Если я верно понял, правилом «хорошего тона» является оформление кода в виде класса, и если по смыслу выполняемых задач экземпляр этого класса может быть только один, то заодно и объявление этого экземпляра в .h файле:
    extern MyClass MyClassObject;
    
    и создание одного глобального объекта в .cpp файле:
    MyClass MyClassObject;
    
    Например, если мы делаем класс для работы с аппаратным последовательным портом, то поскольку такой порт физически только один, то желательно в самой библиотеке экземпляр класса и создать. Собственно, в стандартной библиотеке объект Serial так и объявлен.
    Написанную библиотеку нужно положить в папку с каким-нибудь подходящим именем в каталог «hardware\libraries», и перезапустить среду Arduino. При запуске среда попытается скомпилировать Вашу библиотеку, и если возникнут ошибки, о них будет сказано.
    Неплохо создать в папке с библиотекой файл «keywords.txt», в котором описываются имена типов, методов, функций, констант, используемых в библиотеке, чтобы редактор «раскрашивал» их соответствующими цветами. Синтаксис у файла простой — вот пример (разделитель — TAB):
    --- keywords.txt ---
    MyType	KEYWORD1
    MyFunction	KEYWORD2
    MY_CONSTANT	LITERAL1
    ---
    
    Кроме того, можно создать папку «examples», куда сложить одну или несколько папок с проектами примеров работы с библиотекой (уже в формате .pde).
    В качестве примера приведу простенькую библиотечку, которая организует ввод чисел с последовательного порта.
    В ходе экспериментов с Arduino бывает удобно написать программку в диалоговой форме, и работать с ней через терминалку (ту же HyperTerminal). Ну и постоянно встает задача ввода чисел — этим библиотека и занимается. Работают с библиотекой примерно так:
    #include <SerialInput.h>
    
    void setup() {
      Serial.begin(9600);
    }
    
    void loop()
    {
      long int Number;
    
      Serial.print("Enter number: ");
      Number = SerialInput.InputNumber();	// Здесь ввод и происходит
    
      Serial.print("You entered: ");
      Serial.println(Number, DEC);
    }
    
    Более полный пример идет с библиотекой, скачать которую можно тут: SerialInput.zip Архив разархивировать в папку «hardware\libraries».
    • +5
    • 21,2k
    • 7
    Поделиться публикацией
    Похожие публикации
    Никаких подозрительных скриптов, только релевантные баннеры. Не релевантные? Пиши на: adv@tmtm.ru с темой «Полундра»

    Зачем оно вам?
    Реклама
    Комментарии 7
    • 0
      Хотя сама статья для меня оказалась мало полезна, зато узнал, что это вообще за Arduino такое :)
      • 0
        Полезность второго пункта IMHO весьма значительна — уже для себя считаю, что писал не зря :)
        • 0
          Спасибо, учту.
          Скоро собираюсь покупать Arduino для одного проекта…
          • 0
            Как я понимаю эту библиотеку можно подключить к Visual C++ и с помощью нее передавать и получать данные по Arduino?
            • 0
              Наоборот — это библиотека для другой стороны — она на Arduino / Freeduino выполняется.
              А со стороны компьютера, если речь идет о Windows & C/C++, то обмен данными идет стандартным путем, как и через любой COM порт. (CreateFile, SetCommTimeouts, SetCommState, ReadFile, WriteFile)
              В частности у меня есть пример: arduino-ru.blogspot.com
              • 0
                Что-то я в Visual С++ таких функций не нашел =( Скачал ваши исходники, буду разбираться как отправлять данные с компа.

                Буду очень благодарен если вы напишите пост на эту тему=) Я думаю многим будет интересно=)
            • 0
              было бы неплохо небольшой обзор существующих библиотек сделать. Мне хоть и приходилось пока пользоваться только одной для управления движками — AFMotor (брал тут — www.ladyada.net/make/mshield/download.html ), но было бы интересно, что еще есть, дабы самому не тратить время, а творить :)

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