В этой статье хочу выложить программную часть передачи данных между двумя 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("");
}
}
Вроде бы все не так сложно как кажется. Но у всех бывают сложности, в том числе и у меня были сложности. Но после того как разобрался, оказалось не так сложно.
Когда сам искал информацию ни как ни чего не мог найти. Все статьи были с объяснениями по передачи одного пакета данных.
Но в долгих поисках, я нашел интересующую информацию. Как передать несколько пакетов данных одним сеансом.
И так начнем.
(сражу приношу извинения по поводу определений, учусь всему сам, может что-то называю не правильными определениями)
Пока что просто выкладываю код который я использовал, без объяснений, давно в нем не ковырялсяи не все помню. Если будут вопросы,пишите, будем разбираться вместе.
Код который я использовал на клиенте (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("");
}
}
Вроде бы все не так сложно как кажется. Но у всех бывают сложности, в том числе и у меня были сложности. Но после того как разобрался, оказалось не так сложно.
привет
ВідповістиВидалитиА какие библиотеки???
вот по этой ссылочке http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01
Видалититогда надо поправить код
ВідповістиВидалитиIDE выдаёт ошибки
\\\
#include
^
exit status 1
#include expects "FILENAME" or
\\\\
согласен, возможно при копировании ошибся. Если есть правильные строчки с инклюдами, пришли, я обновлю статью, у меня просто не осталось исходников.
Видалитибуду ждать с нетерпением)))
ВідповістиВидалити