This is a work in progress for an NRF2401P
Dependents: NRF_receiver sender locker4 Weather_Station_Ofiicial ... more
About
This is a simple library to drive the nRF24l01+.
Hardware
This uses the commonly available breakout. The connections are shown below
Software
Use case: For a simple transmitter
tx code snipet
#include "NRF2401P.h" int main() { * * long long addr1=0xAB00CD; // setup address - any 5 byte number - same as RX * int channel =0x12; // [0-126] setup channel, must be same as RX * bool txOK; * char msg[32]; * char ackData[32]; * char len; * * // Setup * NRF2401P nrf1(PTD6,PTD7, PTD5,PTD4, PTC12); //mosi, miso, sclk, csn, ce) * nrf1.quickTxSetup(channel, addr1); // sets nrf24l01+ as transmitter * * // transmit * strcpy (msg, "Hello"); * txOK= nrf1.transmitData(msg,strlen(msg)); * * // read ack data if available * if (nrf1.isAckData()) { * len= nrf1.getRxData(ackData); // len is number of bytes in ackData * } *}
Use case: For a simple receiver
rx code snipet
#include "NRF2401P.h" *int main(){ * * long long addr1=0xAB00CD; // setup address - any 5 byte number - same as TX * int channel =0x12; // [0-126] setup channel, must be same as TX * bool txOK; * char msg[32]; * char ackData[32]; * char len; * * // Setup * NRF2401P nrf1(PTD6,PTD7, PTD5,PTD4, PTC12); //mosi, miso, sclk, csn, ce) * nrf1.quickRxSetup(channel, addr1); // sets nrf24l01+ as receiver, using pipe 1 * * // set ack data * sprintf(ackData,"Ack data"); * nrf1.acknowledgeData(ackData, strlen(ackData),1); // ack for pipe 1 * * // receive * while (! nrf1.isRxData()); // note this blocks until RX data * len= nrf1.getRxData(msg); // gets the message, len is length of msg * *}
Diff: NRF2401P.h
- Revision:
- 8:3e027705ce23
- Parent:
- 7:621a5b0cf1aa
- Child:
- 9:c21b80aaf250
--- a/NRF2401P.h Sun Jul 05 22:20:40 2015 +0000 +++ b/NRF2401P.h Sun Jul 05 23:33:37 2015 +0000 @@ -95,7 +95,7 @@ NRF2401P (PinName mosi, PinName miso, PinName sclk, PinName _csn, PinName _ce); - char acknowledgeData( char *data, char width, char pipe); + char acknowledgeData(char *data, char width, char pipe); char checkStatus(); void clearStatus(); void flushRx(); @@ -104,7 +104,13 @@ char getRxWidth(); bool isAckData(); bool isRxData(); + + /** Writes message and waits for 10 ms ( + * + * @param msg + */ void log (char *msg); + void quickRxSetup(int channel,long long addr); void quickTxSetup(int channel,long long addr); void readReg(char address, char *data); @@ -113,7 +119,16 @@ char transmitData( char *data, char width ); char setAddressWidth(char width); + + /** Sets the frequency channel nRF24L01+ operates on + * + * @param chan F0 = 2400 + chan [MHz] + * @returns + * 0 on success, + * non-zero on failure. + */ char setChannel(char chan); + void setDynamicPayload(); char setPwrUp(); @@ -133,9 +148,19 @@ char setTxAddress(char *address); char setTxAddress(long long address); char setTxMode(); + + /** Sets the timing and number of TX retries + * + * @param delay Auto Retransmit Delay: '0000' – Wait 250uS', '0001' – Wait 500uS, ..., '1111' – Wait 4000uS + * @param numTries Auto Retransmit Count: '0000' – Re-Transmit disabled, '0001' – Up to 1 Re-Transmit on fail of AA, ..., '1111' – Up to 15 Re-Transmit on fail of AA + * @returns + * 0 on success, + * non-zero on failure. + */ char setTxRetry(char delay, char numTries); + void start(); - char * statusString(); + char* statusString(); void writeReg(char address, char *data, char width); void writeReg(char address, char data);