Test program for the Nordic Semi nRF24L01 Transceiver Module (http://www.sparkfun.com/products/691), talking to another module connected to SparkFun\'s Nordic Serial Interface Board (http://www.sparkfun.com/products/9019).
main.cpp@7:8099b996329b, 2018-12-19 (annotated)
- Committer:
- jeroenkoster
- Date:
- Wed Dec 19 11:50:03 2018 +0000
- Revision:
- 7:8099b996329b
- Parent:
- 6:c55f867da01d
- Child:
- 8:fd4596275224
small fixes;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Owen | 0:a51a6e7da590 | 1 | #include "mbed.h" |
Owen | 0:a51a6e7da590 | 2 | #include "nRF24L01P.h" |
Owen | 0:a51a6e7da590 | 3 | |
Owen | 0:a51a6e7da590 | 4 | Serial pc(USBTX, USBRX); // tx, rx |
Owen | 0:a51a6e7da590 | 5 | |
jeroenkoster | 2:766f2f117453 | 6 | nRF24L01P my_nrf24l01p(D11, D12, D13, D8, D9, D7); |
jeroenkoster | 6:c55f867da01d | 7 | bool receiver = true; |
jeroenkoster | 2:766f2f117453 | 8 | |
jeroenkoster | 6:c55f867da01d | 9 | #define TRANSFER_SIZE 2 |
Owen | 0:a51a6e7da590 | 10 | |
ViriJay | 3:37c053b30ca0 | 11 | void setDefaults() { |
ViriJay | 3:37c053b30ca0 | 12 | my_nrf24l01p.setRfFrequency(DEFAULT_NRF24L01P_RF_FREQUENCY); |
ViriJay | 3:37c053b30ca0 | 13 | my_nrf24l01p.setRfOutputPower(DEFAULT_NRF24L01P_TX_PWR); |
ViriJay | 3:37c053b30ca0 | 14 | my_nrf24l01p.setAirDataRate(DEFAULT_NRF24L01P_DATARATE); |
ViriJay | 3:37c053b30ca0 | 15 | } |
ViriJay | 3:37c053b30ca0 | 16 | |
ViriJay | 3:37c053b30ca0 | 17 | void setFrequency(int frequency) { |
ViriJay | 3:37c053b30ca0 | 18 | my_nrf24l01p.setRfFrequency(frequency); |
jeroenkoster | 2:766f2f117453 | 19 | } |
jeroenkoster | 2:766f2f117453 | 20 | |
ViriJay | 3:37c053b30ca0 | 21 | void setPower(int power) { |
ViriJay | 3:37c053b30ca0 | 22 | my_nrf24l01p.setRfOutputPower(power); |
ViriJay | 3:37c053b30ca0 | 23 | } |
jeroenkoster | 2:766f2f117453 | 24 | |
ViriJay | 3:37c053b30ca0 | 25 | void setDataReet(int datareet) { |
ViriJay | 3:37c053b30ca0 | 26 | my_nrf24l01p.setAirDataRate(datareet); |
ViriJay | 3:37c053b30ca0 | 27 | } |
ViriJay | 3:37c053b30ca0 | 28 | |
ViriJay | 3:37c053b30ca0 | 29 | void printSettings() { |
ViriJay | 3:37c053b30ca0 | 30 | // Display the (default) setup of the nRF24L01+ chip |
ViriJay | 3:37c053b30ca0 | 31 | pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() ); |
ViriJay | 3:37c053b30ca0 | 32 | pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() ); |
ViriJay | 3:37c053b30ca0 | 33 | pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() ); |
ViriJay | 3:37c053b30ca0 | 34 | pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() ); |
ViriJay | 3:37c053b30ca0 | 35 | pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() ); |
jeroenkoster | 6:c55f867da01d | 36 | pc.printf( "(transfers are grouped into %d characters)\r\n", TRANSFER_SIZE ); |
jeroenkoster | 6:c55f867da01d | 37 | } |
jeroenkoster | 6:c55f867da01d | 38 | |
jeroenkoster | 6:c55f867da01d | 39 | void senderTest(int frequency, int outputPower, int dataRate, bool art) { |
jeroenkoster | 6:c55f867da01d | 40 | my_nrf24l01p.setRfFrequency(frequency); |
jeroenkoster | 6:c55f867da01d | 41 | my_nrf24l01p.setRfOutputPower(outputPower); |
jeroenkoster | 7:8099b996329b | 42 | my_nrf24l01p.setAirDataRate(dataRate); |
jeroenkoster | 6:c55f867da01d | 43 | |
jeroenkoster | 7:8099b996329b | 44 | char txData[TRANSFER_SIZE]; |
jeroenkoster | 6:c55f867da01d | 45 | int txDataCnt = 0; |
jeroenkoster | 6:c55f867da01d | 46 | |
jeroenkoster | 7:8099b996329b | 47 | pc.printf("--- SETTINGS: ---"); |
jeroenkoster | 6:c55f867da01d | 48 | printSettings(); |
jeroenkoster | 7:8099b996329b | 49 | pc.printf("-----------------"); |
jeroenkoster | 6:c55f867da01d | 50 | |
jeroenkoster | 6:c55f867da01d | 51 | for (int i = 0; i < 1000; i++) { |
jeroenkoster | 6:c55f867da01d | 52 | txData[txDataCnt++] = i % 100; |
jeroenkoster | 6:c55f867da01d | 53 | if (txDataCnt >= sizeof(txData)) { |
jeroenkoster | 6:c55f867da01d | 54 | // Send the transmitbuffer via the nRF24L01+ |
jeroenkoster | 6:c55f867da01d | 55 | my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt ); |
jeroenkoster | 6:c55f867da01d | 56 | txDataCnt = 0; |
jeroenkoster | 6:c55f867da01d | 57 | } |
jeroenkoster | 6:c55f867da01d | 58 | } |
jeroenkoster | 6:c55f867da01d | 59 | pc.printf("Finished run!"); |
jeroenkoster | 6:c55f867da01d | 60 | } |
jeroenkoster | 6:c55f867da01d | 61 | |
jeroenkoster | 6:c55f867da01d | 62 | int syncSettings(int frequency, int outputPower, int dataRate, bool art) { |
jeroenkoster | 6:c55f867da01d | 63 | |
jeroenkoster | 2:766f2f117453 | 64 | } |
Owen | 0:a51a6e7da590 | 65 | |
Owen | 0:a51a6e7da590 | 66 | int main() { |
Owen | 0:a51a6e7da590 | 67 | |
Owen | 0:a51a6e7da590 | 68 | // The nRF24L01+ supports transfers from 1 to 32 bytes, but Sparkfun's |
Owen | 0:a51a6e7da590 | 69 | // "Nordic Serial Interface Board" (http://www.sparkfun.com/products/9019) |
Owen | 0:a51a6e7da590 | 70 | // only handles 4 byte transfers in the ATMega code. |
ViriJay | 4:7fa578849b23 | 71 | |
jeroenkoster | 6:c55f867da01d | 72 | char rxData[TRANSFER_SIZE]; |
Owen | 0:a51a6e7da590 | 73 | |
Owen | 0:a51a6e7da590 | 74 | my_nrf24l01p.powerUp(); |
ViriJay | 3:37c053b30ca0 | 75 | |
jeroenkoster | 6:c55f867da01d | 76 | // my_nrf24l01p.enableAutoAcknowledge(NRF24L01P_PIPE_P0); |
jeroenkoster | 6:c55f867da01d | 77 | // my_nrf24l01p.enableAutoRetransmit(100000, 10); |
Owen | 0:a51a6e7da590 | 78 | my_nrf24l01p.setTransferSize( TRANSFER_SIZE ); |
Owen | 0:a51a6e7da590 | 79 | |
Owen | 0:a51a6e7da590 | 80 | my_nrf24l01p.setReceiveMode(); |
Owen | 0:a51a6e7da590 | 81 | my_nrf24l01p.enable(); |
jeroenkoster | 6:c55f867da01d | 82 | |
jeroenkoster | 6:c55f867da01d | 83 | int data[1000]; |
jeroenkoster | 6:c55f867da01d | 84 | if (receiver) { |
jeroenkoster | 6:c55f867da01d | 85 | int rxPacketCnt = 0; |
jeroenkoster | 6:c55f867da01d | 86 | int rxDataCnt = 0; |
jeroenkoster | 6:c55f867da01d | 87 | int i = 0; |
jeroenkoster | 6:c55f867da01d | 88 | bool reading = true; |
jeroenkoster | 6:c55f867da01d | 89 | pc.printf(">> Receiving Modus << \n\r"); |
jeroenkoster | 6:c55f867da01d | 90 | while (reading) { |
jeroenkoster | 6:c55f867da01d | 91 | if ( my_nrf24l01p.readable() ) { |
jeroenkoster | 6:c55f867da01d | 92 | rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) ); |
jeroenkoster | 6:c55f867da01d | 93 | for (int i = 0; i < rxDataCnt; i++) { |
jeroenkoster | 6:c55f867da01d | 94 | i = rxData[i]; |
jeroenkoster | 6:c55f867da01d | 95 | if (i == 113) { |
jeroenkoster | 6:c55f867da01d | 96 | if (rxPacketCnt == 0) { |
jeroenkoster | 6:c55f867da01d | 97 | pc.printf("\n\r-----------\n\r"); |
jeroenkoster | 6:c55f867da01d | 98 | pc.printf("DONE!: length = %d \r\n", rxPacketCnt); |
jeroenkoster | 6:c55f867da01d | 99 | pc.printf("-----------\n\r"); |
jeroenkoster | 6:c55f867da01d | 100 | rxPacketCnt = 0; |
jeroenkoster | 6:c55f867da01d | 101 | } |
jeroenkoster | 6:c55f867da01d | 102 | } else { |
jeroenkoster | 6:c55f867da01d | 103 | data[rxPacketCnt++] = i; |
jeroenkoster | 6:c55f867da01d | 104 | } |
jeroenkoster | 6:c55f867da01d | 105 | } |
jeroenkoster | 6:c55f867da01d | 106 | rxDataCnt = 0; |
ViriJay | 3:37c053b30ca0 | 107 | } |
jeroenkoster | 6:c55f867da01d | 108 | } |
jeroenkoster | 6:c55f867da01d | 109 | } |
jeroenkoster | 6:c55f867da01d | 110 | else { // Transmit mode |
jeroenkoster | 6:c55f867da01d | 111 | pc.printf(">> Sending Modus << \n\r"); |
jeroenkoster | 6:c55f867da01d | 112 | // Frequency test |
jeroenkoster | 6:c55f867da01d | 113 | pc.printf("FREQUENCY TEST"); |
jeroenkoster | 6:c55f867da01d | 114 | senderTest(2400, NRF24L01P_TX_PWR_ZERO_DB, NRF24L01P_DATARATE_2_MBPS, false); |
jeroenkoster | 7:8099b996329b | 115 | // senderTest(2463, NRF24L01P_TX_PWR_ZERO_DB, NRF24L01P_DATARATE_2_MBPS, false); |
jeroenkoster | 7:8099b996329b | 116 | // senderTest(2525, NRF24L01P_TX_PWR_ZERO_DB, NRF24L01P_DATARATE_2_MBPS, false); |
jeroenkoster | 7:8099b996329b | 117 | // // Power (dBm) test |
jeroenkoster | 7:8099b996329b | 118 | // pc.printf("OUTPUT POWER TEST"); |
jeroenkoster | 7:8099b996329b | 119 | // senderTest(2400, NRF24L01P_TX_PWR_ZERO_DB, NRF24L01P_DATARATE_2_MBPS, false); |
jeroenkoster | 7:8099b996329b | 120 | // senderTest(2400, NRF24L01P_TX_PWR_MINUS_6_DB, NRF24L01P_DATARATE_2_MBPS, false); |
jeroenkoster | 7:8099b996329b | 121 | // senderTest(2400, NRF24L01P_TX_PWR_MINUS_12_DB, NRF24L01P_DATARATE_2_MBPS, false); |
jeroenkoster | 7:8099b996329b | 122 | // senderTest(2400, NRF24L01P_TX_PWR_MINUS_18_DB, NRF24L01P_DATARATE_2_MBPS, false); |
jeroenkoster | 7:8099b996329b | 123 | // // Data rate test |
jeroenkoster | 7:8099b996329b | 124 | // pc.printf("DATARATE TEST"); |
jeroenkoster | 7:8099b996329b | 125 | // senderTest(2400, NRF24L01P_TX_PWR_ZERO_DB, NRF24L01P_DATARATE_250_KBPS, false); |
jeroenkoster | 7:8099b996329b | 126 | // senderTest(2400, NRF24L01P_TX_PWR_ZERO_DB, NRF24L01P_DATARATE_1_MBPS, false); |
jeroenkoster | 7:8099b996329b | 127 | // senderTest(2400, NRF24L01P_TX_PWR_ZERO_DB, NRF24L01P_DATARATE_2_MBPS, false); |
Owen | 0:a51a6e7da590 | 128 | } |
ViriJay | 3:37c053b30ca0 | 129 | } |