Hi guys,
i m having a little problem using this sketch with new library for nrf24l01!!!
this is the code that i use and works fine
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"
const int chipSelectNotPin = 53;
const int chipEnablePin = 9;
const int addressSize = 2;
const int packetLength = 28 - addressSize;
const int sensorPin = 2; // the number of the LED pin
int pulseState = LOW; // pulseState used to set off the sensor
long previousMillis = 0; // will store last time pulse signal was changed
long pulseIntervalOn = 1;
long pulseIntervalOff = 1000;
void setup(){
Serial.begin(115200);
// initalize the data ready and chip select pins:
pinMode(chipEnablePin, OUTPUT);
pinMode(chipSelectNotPin, OUTPUT);
pinMode(sensorPin, OUTPUT);
// start the SPI library:
SPI.setDataMode(SPI_MODE0);
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_2XCLOCK_MASK);
SPI.begin();
Serial.println("Configuring nRF...");
// 1Mbps
byte lv_rf_setup = 0x0;
write_reg(RF_SETUP,&lv_rf_setup,1);
//Freq channel
byte lv_rf_ch = 73;
write_reg(RF_CH, &lv_rf_ch, 1);
//set address length
byte lv_setup_aw = 0b00;
switch (addressSize){
case 2:
lv_setup_aw = 0b00;
break;
case 3:
lv_setup_aw = 0b01;
break;
case 4:
lv_setup_aw = 0b10;
break;
case 5:
lv_setup_aw = 0b11;
break;
}
write_reg(SETUP_AW, &lv_setup_aw, 1);
//Disable autoretransmit
//byte lv_setup_retr = 0x0;
// write_reg(SETUP_RETR, &lv_setup_retr, 1);
//Disable Enchanced ShockBurst
byte lv_en_aa = 0x0;
write_reg(EN_AA, &lv_en_aa, 1);
//Disable Pipe 1;
// byte lv_rx_pw_p1 = 0x0;
//write_reg(RX_PW_P1, &lv_rx_pw_p1, 1);
//Set data length in pipe 0;
byte lv_rx_pw_p0 = packetLength;
write_reg(RX_PW_P0, &lv_rx_pw_p0, 1);
//Set address
byte lv_addr[5];
lv_addr[1] = 0xC6;
lv_addr[0] = 0xA1;
// lv_addr[4] = 0xC6;
// lv_addr[3] = 0xA1;
// lv_addr[2] = 0x01;
// lv_addr[1] = 0xF8;
// lv_addr[0] = 0x11;
write_reg(RX_ADDR_P0, &lv_addr[0], addressSize);
//Flush RX buffer
flush_rx();
//Enable 16bit CRC and power up in RX mode
byte lv_config = (1<<PWR_UP) | (1<<PRIM_RX) | (1<<EN_CRC) | (1<<CRCO);
write_reg(CONFIG, &lv_config, 1);
delay(50);
//Enable nRF
CE_HIGH();
delay(10);
}
void loop(){
byte nrf_status = get_nfr_status();
if ((nrf_status & (1<<RX_DR)) != 0) {
write_reg(STATUS, &nrf_status, (1<<RX_DR));
//1. Read payload
byte ff_status = read_reg(FIFO_STATUS);
while (~ff_status & (1<<RX_EMPTY)){
byte buf[packetLength];
memset(buf,0,sizeof(buf));
read_rx((byte*)(&buf),packetLength);
//8th byte - current HR
Serial.print("HR:");
if (buf[5] < 100) Serial.print(" ");
Serial.print(buf[7-addressSize], DEC);
// Last byte - Avarage HR
Serial.print(" AvgHR:");
if (buf[packetLength-1] < 100) Serial.print(" ");
Serial.print(buf[packetLength-1], DEC);
//Raw packet
Serial.print(" Raw data: ");
for (int i=0; i<packetLength; i++){
if (buf[i] < 0x10) Serial.print("0");
Serial.print(buf[i], HEX);
Serial.print(" ");
}
Serial.println();
ff_status = read_reg(FIFO_STATUS);
}
}
//Send pulse to trigger sensor
unsigned long currentMillis = millis();
if ((pulseState == LOW) && (currentMillis - previousMillis > pulseIntervalOff)) {
previousMillis = currentMillis;
pulseState = HIGH;
digitalWrite(sensorPin, pulseState);
}
if ((pulseState == HIGH) && (currentMillis - previousMillis > pulseIntervalOn)) {
previousMillis = currentMillis;
pulseState = LOW;
digitalWrite(sensorPin, pulseState);
}
}
byte read_reg(byte reg){
byte lv_reg;
CSN_LOW();
SPI.transfer(R_REGISTER | (REGISTER_MASK & reg));
lv_reg = SPI.transfer(NOP);
CSN_HIGH();
return lv_reg;
}
void write_reg(byte reg, byte* value, byte len){
CSN_LOW();
SPI.transfer(W_REGISTER | (REGISTER_MASK & reg));
for (int i = 0; i < len; i++){
SPI.transfer(value[i]);
}
CSN_HIGH();
}
byte get_nfr_status(){
byte lv_status = 0x0;
CSN_LOW();
lv_status = SPI.transfer(NOP);
CSN_HIGH();
return lv_status;
}
void CE_HIGH(){
digitalWrite(chipEnablePin, HIGH);
}
void CE_LOW(){
digitalWrite(chipEnablePin, LOW);
}
void CSN_HIGH(){
digitalWrite(chipSelectNotPin, HIGH);
}
void CSN_LOW(){
digitalWrite(chipSelectNotPin, LOW);
}
void read_rx(byte *rx_buf, int rx_size){
CSN_LOW();
SPI.transfer(R_RX_PAYLOAD);
for (int i=0; i<rx_size; i++){
rx_buf[i] = SPI.transfer(NOP);
}
CSN_HIGH();
}
void flush_rx(){
CSN_LOW();
SPI.transfer(FLUSH_RX);
CSN_HIGH();
}