Я пытаюсь синхронизировать два приемопередатчика NRF24L01, выступающих в качестве передатчиков, в NRF24L01, действующий в качестве приемника.
Оба передатчика будут связаны с отдельными датчиками, и данные этих датчиков - это то, что я пытаюсьпередавать в приемник, однако, коллективно и одновременно.Каковы результаты этого столкновения непонятных данных, поступающих с обоих передатчиков.
Мой код выглядит следующим образом.Как вы можете видеть в коде приемника ниже, я попытался отделить пакеты данных от передатчиков.
#include <SPI.h>
#include "RF24.h"
RF24 myRadio (8, 9);
byte addresses[6] = {"1Node"};
int accelgyroscope[3];
int ax, ay, az;
int gx, gy, gz;
int LED_GREEN = A3;
int LED_RED = A2;
struct Pack {
int data1;
int data2;
int data3;
int data4;
int data5;
int accx;
int accy;
int accz;
int con1;
int con2;
int data11;
int data22;
int data33;
int data44;
int data55;
int accxx;
int accyy;
int acczz;
} packet;
void setup() {
Serial.begin(9600);
myRadio.begin();
myRadio.setChannel(108);
myRadio.setPALevel(RF24_PA_MIN);
myRadio.openReadingPipe(1, addresses[0]);
myRadio.openReadingPipe(2, addresses[1]);
myRadio.startListening();
Serial.print("LABEL,F1,F2,F3,F4,F5,X,Y,Z,C1,C2");
Serial.println();
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_RED, OUTPUT);
}
void loop() {
if ( myRadio.available()) {
analogWrite(LED_GREEN, 1023);
analogWrite(LED_RED, 0);
myRadio.read( &packet, sizeof(packet) );
Serial.print("TRANSMITTER 1: ");
Serial.print(", ");
Serial.print(packet.data1);
Serial.print(", ");
Serial.print(packet.data2);
Serial.print(", ");
Serial.print(packet.data3);
Serial.print(", ");
Serial.print(packet.data4);
Serial.print(", ");
Serial.print(packet.data5);
Serial.print(", ");
Serial.print(packet.accx);
Serial.print(", ");
Serial.print(packet.accy);
Serial.print(", ");
Serial.print(packet.accz);
Serial.print(", ");
Serial.print(packet.con1);
Serial.print(", ");
Serial.print(packet.con2);
Serial.print(" ");
Serial.print("TRANSMITTER 2: ");
Serial.print(", ");
Serial.print(packet.data11);
Serial.print(", ");
Serial.print(packet.data22);
Serial.print(", ");
Serial.print(packet.data33);
Serial.print(", ");
Serial.print(packet.data44);
Serial.print(", ");
Serial.print(packet.data55);
Serial.print(", ");
Serial.print(packet.accxx);
Serial.print(", ");
Serial.print(packet.accyy);
Serial.print(", ");
Serial.print(packet.acczz);
Serial.print(", ");
Serial.println();
}
else
{
analogWrite(LED_RED, 1023);
analogWrite(LED_GREEN, 0);
}
}
Вот код моего первого передатчика.
#include <SPI.h> //libraries para sa nrf24l01
#include "RF24.h" //
#include <Wire.h> // MPU-6050 I2C LIBRARY
#include <I2Cdev.h> //
#include <MPU6050.h> //
#define flex_1 A0 //declaring ng variable tsaka pin assignment ng 5 flex sensors
#define flex_2 A1
#define flex_3 A2
#define flex_4 A3
#define flex_5 A6
MPU6050 accelgyro; // variable ng mpu6050
int16_t ax, ay, az; // variables para accelerometer and gyroscope
int16_t gx, gy, gz;
int pinx=2; // pin assignment ng contact sensors
int piny=3;
RF24 myRadio (8, 9); // CSN AT CE PIN ASSIGNMENT
byte addresses[6] = {"1Node"}; // address ng both transmitter and receiver
// structure para masend ng inorder
struct Pack {
int data1;
int data2;
int data3;
int data4;
int data5;
int accx;
int accy;
int accz;
int con1;
int con2;
} packet;
void setup() {
Serial.begin(38400); // para magamit ang serial monitor
Serial.println(F("RF24/Simple Transmit data Test"));
Wire.begin(); //
accelgyro.initialize(); // para maread ang pin ng mpu6050
pinMode(pinx, INPUT);
digitalWrite(pinx, HIGH);
pinMode(piny, INPUT);
digitalWrite(piny, HIGH);
/*
accelgyro.setXAccelOffset(2825);
accelgyro.setYAccelOffset(457);
accelgyro.setZAccelOffset(645);
*/
myRadio.begin(); // nrf24l01
myRadio.setChannel(108);
myRadio.setPALevel(RF24_PA_MIN);
myRadio.openWritingPipe(addresses[0]);
}
void loop() {
packet.data1 = analogRead(flex_1);
packet.data1=map(packet.data1, 450, 950, 3000, 4000);
packet.data2 = analogRead(flex_2);
packet.data2=map(packet.data2, 450, 950, 3300, 4500);
packet.data3 = analogRead(flex_3);
packet.data3=map(packet.data3, 450, 950, 3000, 4000);
packet.data4 = analogRead(flex_4);
packet.data4=map(packet.data4, 450, 950, 3000, 4000);
packet.data5 = analogRead(flex_5);
packet.data5=map(packet.data5, 450, 950, 3000, 4000);
packet.accx=ax;
packet.accy=ay;
packet.accz=az;
packet.con1=digitalRead(pinx);
packet.con2=digitalRead(piny);
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
if (myRadio.write(&packet, sizeof(packet))) {
Serial.print(F("flex1 = "));
Serial.print(packet.data1);
Serial.print(F(" flex2 = "));
Serial.print(packet.data2);
Serial.print(F(" flex3 = "));
Serial.print(packet.data3);
Serial.print(F(" flex4 = "));
Serial.print(packet.data4);
Serial.print(F(" flex5 = "));
Serial.print(packet.data5);
Serial.print(F(" accx = "));
Serial.print(packet.accx);
Serial.print(F(" accy = "));
Serial.print(packet.accy);
Serial.print(F(" accz = "));
Serial.print(packet.accz);
Serial.print(F(" con1 = "));
Serial.print(packet.con1);
Serial.print(F(" con2 = "));
Serial.print(packet.con2);
Serial.println();
}
else {
Serial.print(F("Send failed."));
}
}
А вот другой передатчик:
#include <SPI.h> //libraries para sa nrf24l01
#include "RF24.h" //
#include <Wire.h> // MPU-6050 I2C LIBRARY
#include <I2Cdev.h> //
#include <MPU6050.h> //
#define flex_1 A0 //declaring ng variable tsaka pin assignment ng 5 flex sensors
#define flex_2 A1
#define flex_3 A2
#define flex_4 A3
#define flex_5 A6
MPU6050 accelgyro; // variable ng mpu6050
int16_t ax, ay, az; // variables para accelerometer and gyroscope
int16_t gx, gy, gz;
int pinx=2; // pin assignment ng contact sensors
int piny=3;
RF24 myRadio (8, 9); // CSN AT CE PIN ASSIGNMENT
byte addresses[6] = {"1Node"}; // address ng both transmitter and receiver
// structure para masend ng inorder
struct Pack {
int data11;
int data22;
int data33;
int data44;
int data55;
int accxx;
int accyy;
int acczz;
} packet1;
void setup() {
Serial.begin(9600); // para magamit ang serial monitor
Serial.println(F("RF24/Simple Transmit data Test"));
Wire.begin(); //
accelgyro.initialize(); // para maread ang pin ng mpu6050
pinMode(pinx, INPUT);
digitalWrite(pinx, HIGH);
pinMode(piny, INPUT);
digitalWrite(piny, HIGH);
/*
accelgyro.setXAccelOffset(2825);
accelgyro.setYAccelOffset(457);
accelgyro.setZAccelOffset(645);
*/
myRadio.begin(); // nrf24l01
myRadio.setChannel(108);
myRadio.setPALevel(RF24_PA_MIN);
myRadio.openWritingPipe(addresses[1]);
}
void loop() {
packet1.data11 = analogRead(flex_1);
packet1.data11=map(packet1.data11, 450, 950, 3000, 4000);
packet1.data22 = analogRead(flex_2);
packet1.data22=map(packet1.data22, 450, 950, 3300, 4500);
packet1.data33 = analogRead(flex_3);
packet1.data33=map(packet1.data33, 450, 950, 3000, 4000);
packet1.data44 = analogRead(flex_4);
packet1.data44=map(packet1.data44, 450, 950, 3000, 4000);
packet1.data55 = analogRead(flex_5);
packet1.data55=map(packet1.data55, 450, 950, 3000, 4000);
packet1.accxx=ax;
packet1.accyy=ay;
packet1.acczz=az;
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
if (myRadio.write(&packet1, sizeof(packet1))) {
Serial.print(F("flex1 = "));
Serial.print(packet1.data11);
Serial.print(F(" flex2 = "));
Serial.print(packet1.data22);
Serial.print(F(" flex3 = "));
Serial.print(packet1.data33);
Serial.print(F(" flex4 = "));
Serial.print(packet1.data44);
Serial.print(F(" flex5 = "));
Serial.print(packet1.data55);
Serial.print(F(" accx = "));
Serial.print(packet1.accxx);
Serial.print(F(" accy = "));
Serial.print(packet1.accyy);
Serial.print(F(" accz = "));
Serial.print(packet1.acczz);
Serial.print(F(" con1 = "));
Serial.println();
}
else {
Serial.print(F("Send failed."));
}
}
Как видно, два передатчика,Я использовал разные адреса.Но я не уверен, что сделал все правильно.
Весь мой код и файлы .INO можно найти здесь .Большое спасибо.Я действительно надеюсь на любую помощь, это будет много значить.