I'm trying to read part of the payload but I'm getting all sorts of problem. Basically it should receive a 7 digit char which the first 5 are treated separately from the last 2:
#include <RF24.h>
#include <SPI.h>
#include <nRF24L01.h>
RF24 radio(10, 9);
const byte address[6] = "00001";
int pinoBotao = 2;
int ledPin = 3;
int ini = 0;
int secsVeri = 60;
unsigned long secsIni, msecsIni, veri;
int id = 3;
void setup() {
Serial.begin(9600);
pinMode(pinoBotao, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.setDataRate(RF24_250KBPS);
radio.enableAckPayload();
radio.stopListening();
Serial.println("Connecting...");
delay(3000);
char ackData[8];
char secs[6]; //FIRST PART I WANT
char interval[3]; //SECOND PART I WANT
for (int i = 0; i >= 0; i++) { // endless loop
delay(1000);
// Serial.print("trying: ");
// Serial.println(i);
if (radioWrite(0, 0)) { //HELLO RECEIVER, GIVE ME MY INITIAL DATA
ini = 1;
memset(secs, 0, sizeof(secs));
memset(ackData, 0, sizeof(ackData));
memset(interval, 0, sizeof(interval));
if (radio.isAckPayloadAvailable()) {
radio.read(&ackData, sizeof(ackData));
Serial.print("Answer: ");
Serial.println(ackData); //PRINTING FINE
// for(int i = 0; i < 5; i++)
// secs[i] = ackData[i];
strncpy(secs, ackData, 5); //GETS FIRST PART I WANT. WORKING FINE
// interval[0] = ackData[5]; //DIDNT WORK
// interval[1] = ackData[6]; //DIDNT WORK
strncpy(interval, ackData + 5, 2); //ALSO NOT WORKING
secsIni = atol(secs);
msecsIni = millis();
secsVeri = atoi(interval);
veri = millis();
Serial.print("Secsini: ");
Serial.print(secs); //WORKING FINE
Serial.print(" Secs: ");
Serial.print(secsVeri);
Serial.print(" Veri: ");
Serial.println(interval);
if (secsIni == 0 || secsVeri == 0) continue; //TRY UNTIL CAN EXTRACT THE 2 PARTS FROM PAYLOAD
digitalWrite(ledPin, HIGH);
delay(1500);
digitalWrite(ledPin, LOW);
break;
}
}
}
}
void loop() {
//NON RELEVANT NOW
}
bool radioWrite(int n, unsigned long time) {
char ret[8];
memset(ret, 0, sizeof(ret));
sprintf(ret, "%02d%i%05d", id, n, time);
// Serial.println(ret);
return radio.write(&ret, sizeof(ret));
}
This is what I'm getting on serial monitor
13:01:23.303 -> Answer: 6000860
13:01:23.303 -> Secsini: 60008 Secs: ����������������������� Veri: ��
13:01:24.335 -> Answer: 6000960
13:01:24.335 -> Secsini: 60009 Secs: ����������������������� Veri: ��
Answer is ok, I can get the first 5 digits but can't get the last two. Whats happening?