Trying to get Nucleo to talk to nRF24L01P

Dependencies:   mbed nRF24L01P

Committer:
vceyssens3
Date:
Tue Oct 24 18:55:23 2017 +0000
Revision:
0:8f61132af357
Working on changes to fix SPI;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vceyssens3 0:8f61132af357 1 #include "mbed.h"
vceyssens3 0:8f61132af357 2 #include "nRF24L01P.h"
vceyssens3 0:8f61132af357 3
vceyssens3 0:8f61132af357 4 Serial pc(SERIAL_TX, SERIAL_RX);
vceyssens3 0:8f61132af357 5
vceyssens3 0:8f61132af357 6 nRF24L01P my_nrf24l01p(A6, A5, A4, D6, D5, D7); // mosi, miso, sck, csn, ce, irq
vceyssens3 0:8f61132af357 7
vceyssens3 0:8f61132af357 8 DigitalOut myled1(LED1);
vceyssens3 0:8f61132af357 9 DigitalOut myled2(LED2);
vceyssens3 0:8f61132af357 10
vceyssens3 0:8f61132af357 11
vceyssens3 0:8f61132af357 12 int main() {
vceyssens3 0:8f61132af357 13
vceyssens3 0:8f61132af357 14 // The nRF24L01+ supports transfers from 1 to 32 bytes, but Sparkfun's
vceyssens3 0:8f61132af357 15 // "Nordic Serial Interface Board" (http://www.sparkfun.com/products/9019)
vceyssens3 0:8f61132af357 16 // only handles 4 byte transfers in the ATMega code.
vceyssens3 0:8f61132af357 17 #define TRANSFER_SIZE 4
vceyssens3 0:8f61132af357 18
vceyssens3 0:8f61132af357 19 char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
vceyssens3 0:8f61132af357 20 int txDataCnt = 0;
vceyssens3 0:8f61132af357 21 int rxDataCnt = 0;
vceyssens3 0:8f61132af357 22
vceyssens3 0:8f61132af357 23 my_nrf24l01p.powerUp();
vceyssens3 0:8f61132af357 24
vceyssens3 0:8f61132af357 25 // Display the (default) setup of the nRF24L01+ chip
vceyssens3 0:8f61132af357 26 pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() );
vceyssens3 0:8f61132af357 27 pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() );
vceyssens3 0:8f61132af357 28 pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
vceyssens3 0:8f61132af357 29 pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() ); //code breaks here when no TXaddress found
vceyssens3 0:8f61132af357 30 pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );
vceyssens3 0:8f61132af357 31
vceyssens3 0:8f61132af357 32 pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );
vceyssens3 0:8f61132af357 33
vceyssens3 0:8f61132af357 34 my_nrf24l01p.setTransferSize( TRANSFER_SIZE );
vceyssens3 0:8f61132af357 35
vceyssens3 0:8f61132af357 36 my_nrf24l01p.setReceiveMode();
vceyssens3 0:8f61132af357 37 my_nrf24l01p.enable();
vceyssens3 0:8f61132af357 38
vceyssens3 0:8f61132af357 39 while (1) {
vceyssens3 0:8f61132af357 40
vceyssens3 0:8f61132af357 41 // If we've received anything over the host serial link...
vceyssens3 0:8f61132af357 42 if ( pc.readable() ) {
vceyssens3 0:8f61132af357 43
vceyssens3 0:8f61132af357 44 // ...add it to the transmit buffer
vceyssens3 0:8f61132af357 45 txData[txDataCnt++] = pc.getc();
vceyssens3 0:8f61132af357 46
vceyssens3 0:8f61132af357 47 // If the transmit buffer is full
vceyssens3 0:8f61132af357 48 if ( txDataCnt >= sizeof( txData ) ) {
vceyssens3 0:8f61132af357 49
vceyssens3 0:8f61132af357 50 // Send the transmitbuffer via the nRF24L01+
vceyssens3 0:8f61132af357 51 my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );
vceyssens3 0:8f61132af357 52
vceyssens3 0:8f61132af357 53 txDataCnt = 0;
vceyssens3 0:8f61132af357 54 }
vceyssens3 0:8f61132af357 55
vceyssens3 0:8f61132af357 56 // Toggle LED1 (to help debug Host -> nRF24L01+ communication)
vceyssens3 0:8f61132af357 57 myled1 = !myled1;
vceyssens3 0:8f61132af357 58 }
vceyssens3 0:8f61132af357 59
vceyssens3 0:8f61132af357 60 // If we've received anything in the nRF24L01+...
vceyssens3 0:8f61132af357 61 if ( my_nrf24l01p.readable() ) {
vceyssens3 0:8f61132af357 62
vceyssens3 0:8f61132af357 63 // ...read the data into the receive buffer
vceyssens3 0:8f61132af357 64 rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );
vceyssens3 0:8f61132af357 65
vceyssens3 0:8f61132af357 66 // Display the receive buffer contents via the host serial link
vceyssens3 0:8f61132af357 67 for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) {
vceyssens3 0:8f61132af357 68
vceyssens3 0:8f61132af357 69 pc.putc( rxData[i] );
vceyssens3 0:8f61132af357 70 }
vceyssens3 0:8f61132af357 71
vceyssens3 0:8f61132af357 72 // Toggle LED2 (to help debug nRF24L01+ -> Host communication)
vceyssens3 0:8f61132af357 73 myled2 = !myled2;
vceyssens3 0:8f61132af357 74 }
vceyssens3 0:8f61132af357 75
vceyssens3 0:8f61132af357 76 }
vceyssens3 0:8f61132af357 77 }