JNP3 IoT - nrf24L01+ echo app

Dependencies:   mbed nRF24L01P

Fork of nRF24L01P_Hello_World by Owen Edwards

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main_echo.cpp Source File

main_echo.cpp

00001 #include "mbed.h"
00002 #include "nRF24L01P.h"
00003 
00004 //***************************************************************************//
00005 // !!! SETTINGS !!!
00006 
00007 #define DATA_RATE       NRF24L01P_DATARATE_250_KBPS    
00008 //#define DATA_RATE       NRF24L01P_DATARATE_1_MBPS     
00009 //#define DATA_RATE       NRF24L01P_DATARATE_2_MBPS    
00010 
00011 #define POWER           NRF24L01P_TX_PWR_ZERO_DB
00012 //#define POWER           NRF24L01P_TX_PWR_MINUS_6_DB
00013 //#define POWER           NRF24L01P_TX_PWR_MINUS_12_DB
00014 //#define POWER           NRF24L01P_TX_PWR_MINUS_18_DB
00015 
00016 #define CHANNEL         0 // 0 - 30
00017 
00018 
00019 #define RX_ADDRESS      ((unsigned long long) 0xABCDEF02)
00020 #define TX_ADDRESS      ((unsigned long long) 0xABCDEF00)
00021 #define ECHO_DELAY      0.2
00022 
00023 #define TRANSFER_SIZE   1
00024 
00025 //***************************************************************************//
00026 
00027 
00028 
00029 Serial pc(USBTX, USBRX); // tx, rx
00030 nRF24L01P radio(PB_15, PB_14, PB_13, PB_12, PB_1, PB_2);    // mosi, miso, sck, csn, ce, irq
00031 
00032 
00033 DigitalOut myled1(LED1);
00034 InterruptIn button(USER_BUTTON);
00035 
00036 bool send_data = false;
00037 
00038 void send_packet(){
00039     send_data = true;
00040 }
00041 
00042 int main() {
00043 
00044     
00045     char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
00046 
00047     pc.baud(115200);
00048     radio.powerDown();
00049     radio.powerUp();
00050     
00051     button.rise(&send_packet);
00052     
00053     radio.setAirDataRate(DATA_RATE);
00054     radio.setRfOutputPower(POWER);
00055     radio.setRfFrequency(NRF24L01P_MIN_RF_FREQUENCY + 4 * CHANNEL);
00056     radio.setRxAddress(RX_ADDRESS, 4);
00057     radio.setTxAddress(TX_ADDRESS, 4);
00058     radio.setCrcWidth(NRF24L01P_CRC_8_BIT);
00059 
00060     // Display the (default) setup of the nRF24L01+ chip
00061     pc.printf( "nRF24L01+ Frequency    : %d MHz\r\n",  radio.getRfFrequency() );
00062     pc.printf( "nRF24L01+ Output power : %d dBm\r\n",  radio.getRfOutputPower() );
00063     pc.printf( "nRF24L01+ Data Rate    : %d kbps\r\n", radio.getAirDataRate() );
00064     pc.printf( "nRF24L01+ TX Address   : 0x%010llX\r\n", radio.getTxAddress() );
00065     pc.printf( "nRF24L01+ RX Address   : 0x%010llX\r\n", radio.getRxAddress() );
00066 
00067 
00068     radio.setTransferSize( TRANSFER_SIZE );
00069     
00070     myled1 = 0;
00071 
00072     radio.setReceiveMode();
00073     radio.enable();
00074 
00075     while (1) {
00076         int tx_bytes;
00077         int rx_bytes;
00078 
00079         if(radio.readable()){
00080 
00081             rx_bytes = radio.read(NRF24L01P_PIPE_P0, rxData, sizeof(rxData));
00082             myled1 = 1;
00083             
00084             wait(ECHO_DELAY);
00085             
00086             tx_bytes = radio.write(NRF24L01P_PIPE_P0, txData, TRANSFER_SIZE);
00087             myled1 = 0;
00088         }
00089         
00090         if(send_data){
00091             tx_bytes = radio.write(NRF24L01P_PIPE_P0, txData, TRANSFER_SIZE);
00092             send_data = false;
00093         }
00094         
00095     }
00096 }