Arduino использовать методы одной библиотеки в другой

252
18 декабря 2017, 14:30

Прошу вас объяснить или же указать на источник где можно подробно прочитать способ использования одной библиотеки Arduino в другой. В частности, мне надо использовать методы популярной библиотеки "RF24.h". Сразу попрошу: не пишите, пожалуйста, сюда просто код, без объяснений (которых в нете просто куча). Добавьте хотябы коментарии ко всем его пунктам или просто укажите на источник где можно прочитать подробно как это делается.

Так как библиотеки Arduino - просто классы выведенные в однельные файлы с кодом, я понимаю что, мне надо, всего-то, узнать о способе использования методов одного класса в другом. Но библиотека "RF24.h" также требует несколько строк инициализации (в том числе и конструктора) перед тем как ее можно использовать. Пример:

RF24 radio(9, 53); //в конструктор указываем пины "ce" и "cs"
radio.begin(); // Старт работы;
radio.setChannel(0x57);
radio.setPALevel(RF24_PA_LOW);  //Установка максимальной мощности;
radio.enableAckPayload();  //Разрешение отправки нетипового ответа передатчику;
radio.openReadingPipe(1, 0xE8E8F0F0E1LL); // Открываем трубу
radio.startListening();  //начинаем слушать;

Далее мне всего-лишь нужны методы "radio.available()" и "radio.read()" Моя библиотека призвана помочь передавать и принимать строки символов неограниченной длины.

Добавлю что, как простой класс в основном файле ".ino" по "соседству" с библиотекой "RF24.h все отлично работает. Проблемы начинаются когда, мой класс выводится в отдельные файлы ".h" и ".cpp" и необходимо вызывать методы "RF24.h" из него. Я пробовал инициализировать "RF24.h" вот так:

RF24E::RF24E(uint16_t _cepin, uint16_t _cspin) //конструктор моего класса
{    
    RF24 radio(_cepin, _cspin);
    radio.begin(); // Старт работы;
    radio.setChannel(0x57);
    radio.setPALevel(RF24_PA_LOW);  //Установка максимальной мощности;
    radio.enableAckPayload();  //Разрешение отправки нетипового ответа передатчику;
    radio.openReadingPipe(1, 0xE8E8F0F0E1LL); // Открываем трубу
    radio.startListening();  //начинаем слушать;
};

Спасибо вам за потраченное время.

Answer 1

Нет такого способа. Библиотеку использует скетч. Только скетч может использовать библиотеку.

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

Если бы библиотека могла использовать другую библиотеку, то часто возникала бы ситуация, когда одна и та же библиотека включена в скетч и в коде скетча, и в коде другой библиотеки. И мало того - это одна и та же библиотека, только разные версии.

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

Поэтому только скетч может использовать библиотеки.

READ ALSO
Способы передачи файла через компорт(Comport, rs232)

Способы передачи файла через компорт(Comport, rs232)

Здравствуйте, необходимо реализовать передачу файла на comportОбъясните, пожалуйста, если компорт ведет дело с байтами, то задача "Передать...

149
Размер папки в Qt [дубликат]

Размер папки в Qt [дубликат]

На данный вопрос уже ответили:

209
Вопрос по синтаксису куска кода

Вопрос по синтаксису куска кода

Недавно наткнулся на такой кусок кода:

167
Удаление дубликатов в двух файлах

Удаление дубликатов в двух файлах

Собственно есть файл1 и файл2, допустим обьем файла1 100кк строк, а файла2 20кк строк, нужно проверить вхождения файла2 в файл1, и записать в новые...

156