Подключение 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 declaredinthisscopeПробовал добавить этот код:
1#ifdef __arm__2#define SPI_CLOCK_DIV4 213#define _BV(bit) (1 << (bit))4#define printf_P printf5#endifРезультата не увидел, все та же ошибка.
Нашел что нужно
fdevopen( &serial_putc, 0 );
заменить на
#if !defined(__arm__)
fdevopen( &serial_putc, 0 );
#endif
Только сто попробовал. В результате код пршивается, но ответа от датчика нет.