27 сентября 2014

RF24 и Arduino Due.



Есть такой радиопередатчик nRF24L01, который работает на частота 2,4 МГц и подключается по шине SPI. C помощью него несложно организовать беспроводную передачу данных между несколькими платами Arduino. На AVR-контроллерах передатчик запускается на ура, потому что библиотек для него вагон, а вот тот же код, но для ARM-процессора, собираться не хочет.

Ошибки примерно такие:

RF24\RF24.cpp: In member function 'void RF24::csn(int)':
RF24\RF24.cpp:30:23: error: 'SPI_CLOCK_DIV4' was not declared in this scope
   SPI.setClockDivider(SPI_CLOCK_DIV4);

RF24\RF24.cpp: In member function 'void RF24::print_status(uint8_t)':
RF24\RF24.cpp:194:31: error: '_BV' was not declared in this scope
            (status & _BV(RX_DR))?1:0,

RF24\RF24.cpp:199:11: error: 'printf_P' was not declared in this scope


Поиск в интернете показал, что пробелы по части Arduino Due в библиотеках Arduino IDE есть, но заполнять их никто не торопится.
Конкретно эти ошибки при использовании библиотеки RF24 для Arduino Due исправляются добавление в начало файла "RF24\RF24.cpp" такого кода:

#ifdef __arm__
#define SPI_CLOCK_DIV4 21
#define _BV(bit) (1 << (bit))
#define printf_P printf
#endif

После этого код должен компилироваться нормально.