NRF24L01 проблема при

Нет ответов
никита
Offline
Зарегистрирован: 04.04.2014

Добрый день, делаю сеть радио модулей NRF24L01 на atmega328p, для управления неоновыми костюмами.     При передачи с Arduino uno r3(передатчик) на плату с atmega328p( приемник), все работает нормально, но при увеличении дистанции между ним, модуль приемника, просто перестает принимать, остается в состояние включеного или выключенного диода, даже если вернуть его в прежнюю позицию.                                                                                                           На приемнике модуль NRF24L01  питается через стабилизатор lm317,  конденсаторы параллельно питанию поставлены, atmega328p питается через стабилизатор l7805cv,  питаются оба от кроны.     Использованна библиотека mirf, код скетча передатчика:                                                                                      

#include <SPI.h>

#include <Mirf.h>
#include <MirfHardwareSpiDriver.h>
#include <MirfSpiDriver.h>
#include <nRF24L01.h>
byte active;

void setup()
{   
  Serial.begin(57600);
    Mirf.spi = &MirfHardwareSpi;
    active=0;
    Mirf.init(); 
    Mirf.payload = 1;
    Mirf.config();
    Mirf.setTADDR((byte *)"serv1");
}

void loop()
{ delay(100);
if (active ==0  ){active=1;} else {active=0;}
byte data[1];
data[0]=active;
Mirf.send( data);
}                                                                                                                код скетча приемника:                                                                                                                               #include <SPI.h>
 
	#include <Mirf.h>
#include <MirfHardwareSpiDriver.h>
#include <MirfSpiDriver.h>
#include <nRF24L01.h>
int led = 2;
 
void setup()
{pinMode(led, OUTPUT);  
  Serial.begin(57600);
    Mirf.spi = &MirfHardwareSpi;
    Mirf.init(); 
    Mirf.setRADDR((byte *)"serv1");
    Mirf.payload = 1;
    Mirf.config();
}
 
void loop()
{
   byte data[1]; 
     if(!Mirf.isSending() && Mirf.dataReady()){ 
            Mirf.getData(data);
          if (data[0]==1) {digitalWrite(led, HIGH);}
           if (data[0]==0) { digitalWrite(led, LOW);}
     }
}