30.12.2011

Адаптация библиотек для Arduino 1.0

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

  1. Переходим в каталог с библиотекой
  2. Ищем во всех файлах .cpp и .h, не встречается ли где
    #include "WProgram.h"
  3. Если находим - заменяем на:
#if defined(ARDUINO) && ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif 


И, если нам повезло и больше ничего править не надо, библиотека будет одинаково хорошо работать и с IDE 0022/0023, и с 1.0.

9 комментариев:

  1. А может быть сделать файл WProgram.h в котором просто написать #include "Arduino.h" ? Или я окончательно забыл C++?

    ОтветитьУдалить
  2. Этот WProgram.h находится в "ядре" - специальном каталоге, к которому у писателя библиотеки доступа нет. Перед началом компиляции каталог ядра объединяется с каталогами библиотек, поэтому дублирование WProgram.h может привести к несовместимости со старыми IDE 0022/23, где он еще есть в ядре (перетрется он, и "до свидания" :(

    Почему авторы хотят удалить WProgram.h интуитивно понятно - ничто не должно напоминать о Processing-е, даже расширение файлов со скетчами заменили на c ".pde" на ".ino".

    ОтветитьУдалить
  3. Спасибо. Выбранный авторами механизм объединения каталогов выглядит немного странно. Или сам компилятор не поддерживает переменную INCLUDE со списком каталогов?

    ОтветитьУдалить
  4. А можно ли как то сделать что бы IDE 0022/0023 и 1.0 одновременно сосуществовали и без таких правок, ведь есть и экземплы. И еще хотелось бы что бы те же экземплы, библиотеки и скетчбук лежали не в стандартной папке а в какой то своей?

    ОтветитьУдалить
  5. "Такие правки" делаются в библиотеке.

    У меня установлены все ArduinoIDE, начиная с 0017 - скоро уже, наверное, пора удалять наиболее древние ;)

    В настройках ArduinoIDE можно указать, какой каталог использовать в качестве sketchbook. Кастом-библиотеки должны лежать в sketchbook/libraries, и тогда они будут одинаково хорошо видны всем установленным ArduinoIDE - при условии, что у них всех в настройках sketchbook настроен на один и тот же каталог. Примеры к библиотекам всегда берутся из подкаталога examples внутри каталога с библиотекой.

    ОтветитьУдалить
  6. а если я качаю библиотеки звне, например отсюда http://code.google.com/p/aeroquad/source/browse/trunk/AeroQuadAPM/DataFlash/?r=354 ...куда мне их положить чтоб проге их было видно???

    ОтветитьУдалить
  7. В каталог sketchbook/libraries.

    Где именно каталог sketchbook - пробито в настройках ArduinoIDE (можно запустить и посмотреть).

    ОтветитьУдалить
  8. Еще в некоторых случаях необходимо заменить
    #include
    на
    #include

    ОтветитьУдалить
    Ответы
    1. у первого include сожрало wiring.h
      у второго - Android.h
      или у меня браузер глючит

      Удалить