UPDATE:- The problem has been resolved. Thank you for everyone who have helped me out.
Problem:-I am sending a very large string (nearly 120 char) over nrf24l01 module but at receiver side i am just getting limited number of char (i.e-32).
Note:-This is going to be in DAQ(Data Acquisition System) so I want to transmit it as fast as possible.
For Example data I send:-
0.1396484400,-0.0065917969,0.8986816400,-1,0,0,-11018,17621,18642,17463,-32543
And Data I receive:-
0.1396484400,-0.0065917969,0.898
(This data is limited to 32char)
Here is the transmitter code
#include <SPI.h>
//#include <SD.h>
#include <Wire.h>
#include <nRF24L01.h>
#include <RF24.h>
//#include "printf.h"
RF24 radio(6,7); // CE, C SN
const byte address[6] = "00001";
int fl2, fl1, fr2, fr1, rl2, rl1, rr2, rr1, st;
float fl, fr, rl, rr;
const int DamperSamplingDelay = 1;
const double conversion = 0.0488758553274682;
char gForceX_text[15];
char gForceY_text[15];
char gForceZ_text[15];
//char fl_text[15];
//char fr_text[15];
//char rl_text[15];
//char rr_text[15];
const int chipSelect = 4;
long accelX, accelY, accelZ;
float gForceX, gForceY, gForceZ;
//String dataString = "";
long gyroX, gyroY, gyroZ, OldTime, TimeDiff;
int rotX, rotY, rotZ;///////////////////////look Data Type
int counter=0;
void setupMPU() {
Wire.beginTransmission(0b1101000); //This is the I2C address of the MPU (b1101000/b1101001 for AC0 low/high datasheet sec. 9.2)
Wire.write(0x6B); //Accessing the register 6B - Power Management (Sec. 4.28)
Wire.write(0b00000000); //Setting SLEEP register to 0. (Required; see Note on p. 9)
Wire.endTransmission();
Wire.beginTransmission(0b1101000); //I2C address of the MPU
Wire.write(0x1B); //Accessing the register 1B - Gyroscope Configuration (Sec. 4.4)
Wire.write(0x00000000); //Setting the gyro to full scale +/- 250deg./s
Wire.endTransmission();
Wire.beginTransmission(0b1101000); //I2C address of the MPU
Wire.write(0x1C); //Accessing the register 1C - Acccelerometer Configuration (Sec. 4.5)
Wire.write(0b00000000); //Setting the accel to +/- 2g
Wire.endTransmission();
}
void radioInt() {
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
radio.setPayloadSize(500);
//radio.setDataRate( RF24_250KBPS );
radio.setRetries(3,5);
}
void setup() {
Serial.begin(2000000);
//printf_begin();
Wire.begin();
setupMPU();
radioInt();
//Serial.print("Initializing SD card...");
/*if (!SD.begin(chipSelect)) {
//Serial.println("Card failed, or not present");
return;
}*/
//Serial.println("SD Card is present");
//writeToSD("Controller Startup!");
//writeToSD("Frequency, AccX, AccY, AccZ, GyrX, GyrY, GyrZ, Front Left Damper, Front Right Damper, Rear Left Damper, Rear Right Damper,Steering");
}
/*void writeToSD(String text) { //Writes Strings to SD card
File dataFile = SD.open("gtms.csv", FILE_WRITE);
if (dataFile) {
dataFile.println(text);
//Print to the //Serial port too:
//Serial.println(text);
dataFile.close();
}
else {
//Serial.println("error opening gtms.csv");
}
}*/
void recordAccelRegisters() {
Wire.beginTransmission(0b1101000); //I2C address of the MPU
Wire.write(0x3B); //Starting register for Accel Readings
Wire.endTransmission();
Wire.requestFrom(0b1101000, 6); //Request Accel Registers (3B - 40)
while (Wire.available() < 6);
accelX = Wire.read() << 8 | Wire.read(); //Store first two bytes into accelX
accelY = Wire.read() << 8 | Wire.read(); //Store middle two bytes into accelY
accelZ = Wire.read() << 8 | Wire.read(); //Store last two bytes into accelZ
processAccelData();
}
void processAccelData() {
gForceX = accelX / 16384.0;
gForceY = accelY / 16384.0;
gForceZ = accelZ / 16384.0;
//if(gprevgForceX
dtostrf(gForceX, 10, 10, gForceX_text);
dtostrf(gForceY, 10, 10, gForceY_text);
dtostrf(gForceZ, 10, 10, gForceZ_text);
}
void recordGyroRegisters() {
Wire.beginTransmission(0b1101000); //I2C address of the MPU
Wire.write(0x43); //Starting register for Gyro Readings
Wire.endTransmission();
Wire.requestFrom(0b1101000, 6); //Request Gyro Registers (43 - 48)
while (Wire.available() < 6);
gyroX = Wire.read() << 8 | Wire.read(); //Store first two bytes into accelX
gyroY = Wire.read() << 8 | Wire.read(); //Store middle two bytes into accelY
gyroZ = Wire.read() << 8 | Wire.read(); //Store last two bytes into accelZ
processGyroData();
}
void processGyroData() {
rotX = gyroX / 131.0;
rotY = gyroY / 131.0;
rotZ = gyroZ / 131.0;
}
/*void printData() {
Serial.print(" Gyro (deg)");
Serial.print("X=");
Serial.print(rotX);
Serial.print(" Y=");
Serial.print(rotY);
Serial.print(" Z=");
Serial.print(rotZ);
Serial.print(" Accel (g)");
Serial.print(" X=");
Serial.print(gForceX);
Serial.print(" Y=");
Serial.print(gForceY);
Serial.print(" Z=");
Serial.println(gForceZ);
}*/
void takeDamperReading() {
fl1 = analogRead(A0);
fr1 = analogRead(A1);
rl1 = analogRead(A2);
rr1 = analogRead(A3);
delay(DamperSamplingDelay);
fl2 = analogRead(A0);
fr2 = analogRead(A1);
rl2 = analogRead(A2);
rr2 = analogRead(A3);
fl = (((fl2 - fl1) * conversion) / DamperSamplingDelay) * 1000;
fr = (((fr2 - fr1) * conversion) / DamperSamplingDelay) * 1000;
rl = (((rl2 - rl1) * conversion) / DamperSamplingDelay) * 1000;
rr = (((rr2 - rr1) * conversion) / DamperSamplingDelay) * 1000;
/*dtostrf(fl, 4, 3, fl_text);
dtostrf(fr, 4, 3, fr_text);
dtostrf(rl, 4, 3, rl_text);
dtostrf(rr, 4, 3, rr_text);*/
st = analogRead(A6);
}
void loop() {
// OldTime = micros();
recordAccelRegisters();
recordGyroRegisters();
takeDamperReading();
// printData();
//dataString = String(TimeDiff) + ", " + String(gForceX) + ", " + String(gForceY) + ", " + String(gForceZ) + ", " + String(rotX) + ", " + String(rotY) + ", " + String(rotZ) + "," + String(fl) + "," + String(fr) + "," + String(rl) + "," + String(rr) + "," + String(st);
char realTime[120];
snprintf(realTime, 120, "%s,%s,%s,%d,%d,%d,%d,%d,%d,%d,%d", gForceX_text, gForceY_text, gForceZ_text, rotX, rotY, rotZ, fl, fr, rl, rr, st );
String realTime_St = realTime;
Serial.println(realTime);
bool done;
while (!done) {
counter += 1;
done=radio.write(realTime, sizeof(realTime));
//Serial.println(realTime);
}
counter = 0;
//Serial.println("\n");
//Serial.println("Okay");
//Serial.println(dataString);
//dataString = "";
// TimeDiff = micros() - OldTime;
//dataString = String(TimeDiff);
// Serial.println(TimeDiff);
//Serial.println("\n");*/
}
Here is the receiver side
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(3,7); // CE, CSN
long y, x;
bool done;
char text[120];
const byte address[6] = "00001";
void setup() {
Serial.begin(2000000);
radioInt();
}
void radioInt(){
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
//radio.setDataRate( RF24_250KBPS );
radio.setRetries(3,5);
radio.setPayloadSize(500);
}
void loop() {
//x=micros();
bool done = 0;
while (!done) {
if (radio.available()) {
//text[0]= "";
radio.read(&text, sizeof(text));
Serial.println(text);
//}
}
}
//if(!radio.available()){
// Serial.println("Error");
//}
//y=micros()-x;
// Serial.println(y);
//y=micros()-x;
//Serial.print("\t");
//Serial.print("Delay");
//Serial.println(y);
//text[]={0};
}