Подключение nRF24l01+ к Arduino Due
- Войдите на сайт для отправки комментариев
Здравствуйте! Приобрел два модуля nRF24l01+, подключил один к Arduino Nano, другой Arduino Due. При программировании с Nano проблем не возникло, а вот с Due не могу сдвинуться с места. Перерыл кучу форумов, ничего дельного не нашел. Вообщем суть проблемы в том, что когда выбираю в среде плату Due, при использовании библиотеки Mirf на этапе компиляции ругается:
Build options changed, rebuilding all C:\Users\stilfer\Desktop\arduino-1.5.8\libraries\Mirf\MirfHardwareSpiDriver.cpp: In member function 'virtual void MirfHardwareSpiDriver::begin()': C:\Users\stilfer\Desktop\arduino-1.5.8\libraries\Mirf\MirfHardwareSpiDriver.cpp:9:22: error: 'SPI_2XCLOCK_MASK' was not declared in this scope SPI.setClockDivider(SPI_2XCLOCK_MASK); ^ Ошибка компиляции.
С библиотекой RF24 пробовал, ни каких признаков передачи не подает, пробовал проверить как указано в статье http://forum.amperka.ru/threads/nrf24l01-%D0%BF%D0%BE%D0%B1%D0%B5%D0%B6%D0%B4%D0%B0%D0%B5%D0%BC-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C.3205/ , с помощью кода :
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" RF24 radio(9,10); // Для Уно //RF24 radio(9,53);// Для Меги const uint8_t num_channels = 128; uint8_t values[num_channels]; void setup(void) { Serial.begin(57600); printf_begin(); radio.begin(); radio.setAutoAck(false); radio.startListening(); radio.printDetails(); // Вот эта строка напечатает нам что-то, если все правильно соединили. delay(5000); // И посмотрим на это пять секунд. radio.stopListening(); int i = 0; // А это напечатает нам заголовки всех 127 каналов while ( i < num_channels ) { printf("%x",i>>4); ++i; } printf("\n\r"); i = 0; while ( i < num_channels ) { printf("%x",i&0xf); ++i; } printf("\n\r"); } const int num_reps = 100; void loop(void) { memset(values,0,sizeof(values)); int rep_counter = num_reps; while (rep_counter--) { int i = num_channels; while (i--) { radio.setChannel(i); radio.startListening(); delayMicroseconds(128); radio.stopListening(); if ( radio.testCarrier() ) ++values[i]; } } int i = 0; while ( i < num_channels ) { printf("%x",min(0xf,values[i]&0xf)); ++i; } printf("\n\r"); } int serial_putc( char c, FILE * ) { Serial.write( c ); return c; } void printf_begin(void) { fdevopen( &serial_putc, 0 ); }
Ругается на:
sketch_nov19a.ino: In function 'void printf_begin()': sketch_nov19a.ino:64:29: error: 'fdevopen' was not declared in this scope Ошибка компиляции.
А вот Nano реагирует на этот код вполне нормально, и модуль ответил. Я так понял что это какие - то особенности архитектуры процессора arm sam3. Помогите пожалуйста разобраться!
Вот тут заявлена поддержка Due ..
Я вот так делал http://blog.radjah.ru/2014/09/rf24-arduino-due.html
Спасибо большое! Заработало! Еще на due проблема была в том, что я CE на 8 ногу сажал, а CSN на 7. Сначала поставил библиотеку, которую вы ,MaksMS, посоветовали, потом переткнул CE на 9 вход, CSN на 10, и модуль стал отвечать))
она реально лучше обычно либы?
Я вот так делал
У меня данный метод не решает проблемы 'fdevopen' was not declared in this scope . Что можете посоветовать?
Я свой хрустальный шар пропил.
Radjah, у вас код из первого поста прошивается в DUE? Я взял код для проверки работоспособности (точно такой же как в первом посте). При попытке прошить ардуино DUE выдает ошибку
'fdevopen'
was not declared
in
this
scope
Пробовал добавить этот код:
1
#ifdef __arm__
2
#define SPI_CLOCK_DIV4 21
3
#define _BV(bit) (1 << (bit))
4
#define printf_P printf
5
#endif
Результата не увидел, все та же ошибка.
Нашел что нужно
fdevopen( &serial_putc, 0 );
заменить на
#if !defined(__arm__)
fdevopen( &serial_putc, 0 );
#endif
Только сто попробовал. В результате код пршивается, но ответа от датчика нет.