12 січ. 2015 р.

Передача данных между nRF24L01

          В этой статье хочу выложить программную часть передачи данных между двумя  nRF24L01 радио модулями.  Которые я использовал в этом проекте Arduino esplora & DFRobot Romeo v2 r3

           Когда сам искал информацию ни как ни чего не мог найти. Все статьи были с объяснениями по передачи одного пакета данных.

            Но в долгих поисках,  я нашел интересующую информацию. Как передать несколько пакетов данных одним сеансом.

И так начнем.



(сражу приношу извинения по поводу определений, учусь всему сам, может что-то называю не правильными определениями) 

Пока что просто выкладываю код который я использовал, без объяснений, давно в нем не ковырялсяи не все помню. Если будут вопросы,пишите,  будем разбираться вместе.


Код который я использовал на клиенте (Esplora):

#include
#include
#include
#include
#include

void setup(){
   Serial.begin(9600);
    Mirf.spi = &MirfHardwareSpi;
    Mirf.init(); 
    Mirf.setTADDR((byte *)"tit1");
    Mirf.payload = 32;
    Mirf.config();
    Serial.println("Incom"); //  
  }
  
void loop(){ 
  int g = 0;
  if (Esplora.readButton(SWITCH_DOWN)==0)  { g = 1; }
  if (Esplora.readButton(SWITCH_UP)==0)    { g = 2; }
  if (Esplora.readButton(SWITCH_LEFT)==0)  { g = 3; }
  if (Esplora.readButton(SWITCH_RIGHT)==0) { g = 4; }
  
  int pot = Esplora.readSlider();
  pot = map (pot , 1 , 1023, 255  ,0 );
  
  int xValue = Esplora.readJoystickX();        
  int yValue = Esplora.readJoystickY();       
  int button = Esplora.readJoystickSwitch();  
  
  int mouseX = map( xValue, -512, 512, 0, 255);
  int mouseY = map( yValue, -512, 512, 0, 255); 
  if (button == 1023)  {button = 0;} else {button = 1;}
    char e[6] ={g,pot,mouseX,mouseY,button}; 
    
    Mirf.setTADDR((byte *)"tit2");
    Mirf.send((byte *) e);
      while(Mirf.isSending()){
  }
}


Этот код на сервере (Spider)

#include
#include
#include
#include

void setup(){
   Serial.begin(9600);
    Mirf.spi = &MirfHardwareSpi;
    Mirf.init(); 
    Mirf.setTADDR((byte *)"tit2");
    Mirf.payload = 32;
    Mirf.config();
    Serial.println("In ... "); 
  }
  void loop(){ 
     byte data[32]; // or int data[32];
     if(!Mirf.isSending() && Mirf.dataReady()){
          Mirf.getData((byte *) &data);
          //Serial.write(byte(data[0]));
          Serial.print(data[0]);  Serial.print("\t");
          Serial.print(data[1]);  Serial.print("\t");
          Serial.print(data[2]);  Serial.print("\t");
          Serial.print(data[3]);  Serial.print("\t");
          Serial.print(data[4]);  Serial.println("");
     }

}

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

5 коментарів:

  1. привет
    А какие библиотеки???

    ВідповістиВидалити
    Відповіді
    1. вот по этой ссылочке http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01

      Видалити
  2. тогда надо поправить код
    IDE выдаёт ошибки
    \\\
    #include

    ^

    exit status 1
    #include expects "FILENAME" or
    \\\\

    ВідповістиВидалити
    Відповіді
    1. согласен, возможно при копировании ошибся. Если есть правильные строчки с инклюдами, пришли, я обновлю статью, у меня просто не осталось исходников.

      Видалити
  3. буду ждать с нетерпением)))

    ВідповістиВидалити