JNP3_IOT_2016Z
/
JNP3_IOT_5_RADIO_BER_RX
nRF24L01+ BER app RX
Fork of nRF24L01P_Hello_World by
main_rx.cpp@2:d2b92fbe58dd, 2016-11-07 (annotated)
- Committer:
- ttajmajer
- Date:
- Mon Nov 07 15:54:54 2016 +0000
- Revision:
- 2:d2b92fbe58dd
nrf24l01 BER app RX
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ttajmajer | 2:d2b92fbe58dd | 1 | #include "mbed.h" |
ttajmajer | 2:d2b92fbe58dd | 2 | #include "nRF24L01P.h" |
ttajmajer | 2:d2b92fbe58dd | 3 | |
ttajmajer | 2:d2b92fbe58dd | 4 | |
ttajmajer | 2:d2b92fbe58dd | 5 | //***************************************************************************// |
ttajmajer | 2:d2b92fbe58dd | 6 | // !!! SETTINGS !!! |
ttajmajer | 2:d2b92fbe58dd | 7 | |
ttajmajer | 2:d2b92fbe58dd | 8 | #define DATA_RATE NRF24L01P_DATARATE_250_KBPS |
ttajmajer | 2:d2b92fbe58dd | 9 | //#define DATA_RATE NRF24L01P_DATARATE_1_MBPS |
ttajmajer | 2:d2b92fbe58dd | 10 | //#define DATA_RATE NRF24L01P_DATARATE_2_MBPS |
ttajmajer | 2:d2b92fbe58dd | 11 | |
ttajmajer | 2:d2b92fbe58dd | 12 | #define POWER NRF24L01P_TX_PWR_ZERO_DB |
ttajmajer | 2:d2b92fbe58dd | 13 | //#define POWER NRF24L01P_TX_PWR_MINUS_6_DB |
ttajmajer | 2:d2b92fbe58dd | 14 | //#define POWER NRF24L01P_TX_PWR_MINUS_12_DB |
ttajmajer | 2:d2b92fbe58dd | 15 | //#define POWER NRF24L01P_TX_PWR_MINUS_18_DB |
ttajmajer | 2:d2b92fbe58dd | 16 | |
ttajmajer | 2:d2b92fbe58dd | 17 | #define CHANNEL 0 // 0 - 30 |
ttajmajer | 2:d2b92fbe58dd | 18 | |
ttajmajer | 2:d2b92fbe58dd | 19 | //***************************************************************************// |
ttajmajer | 2:d2b92fbe58dd | 20 | |
ttajmajer | 2:d2b92fbe58dd | 21 | |
ttajmajer | 2:d2b92fbe58dd | 22 | Serial pc(USBTX, USBRX); // tx, rx |
ttajmajer | 2:d2b92fbe58dd | 23 | nRF24L01P radio(PB_15, PB_14, PB_13, PB_12, PB_1, PB_2); // mosi, miso, sck, csn, ce, irq |
ttajmajer | 2:d2b92fbe58dd | 24 | DigitalOut led(LED1); |
ttajmajer | 2:d2b92fbe58dd | 25 | InterruptIn button(USER_BUTTON); |
ttajmajer | 2:d2b92fbe58dd | 26 | |
ttajmajer | 2:d2b92fbe58dd | 27 | bool stats_reset = false; |
ttajmajer | 2:d2b92fbe58dd | 28 | long rx_packet_counter = 0; |
ttajmajer | 2:d2b92fbe58dd | 29 | long rx_bit_counter = 0; |
ttajmajer | 2:d2b92fbe58dd | 30 | long rx_error_counter = 0; |
ttajmajer | 2:d2b92fbe58dd | 31 | bool status = false; |
ttajmajer | 2:d2b92fbe58dd | 32 | |
ttajmajer | 2:d2b92fbe58dd | 33 | |
ttajmajer | 2:d2b92fbe58dd | 34 | void tick_status(){ |
ttajmajer | 2:d2b92fbe58dd | 35 | status = true; |
ttajmajer | 2:d2b92fbe58dd | 36 | } |
ttajmajer | 2:d2b92fbe58dd | 37 | |
ttajmajer | 2:d2b92fbe58dd | 38 | void print_status(){ |
ttajmajer | 2:d2b92fbe58dd | 39 | char buff[256]; |
ttajmajer | 2:d2b92fbe58dd | 40 | |
ttajmajer | 2:d2b92fbe58dd | 41 | sprintf(buff, "RX packets num: %ld\r\n" |
ttajmajer | 2:d2b92fbe58dd | 42 | "RX bits num: %ld\r\n" |
ttajmajer | 2:d2b92fbe58dd | 43 | "RX errors: %ld\r\n\r\n", |
ttajmajer | 2:d2b92fbe58dd | 44 | rx_packet_counter, rx_bit_counter, rx_error_counter); |
ttajmajer | 2:d2b92fbe58dd | 45 | |
ttajmajer | 2:d2b92fbe58dd | 46 | pc.write((const uint8_t *)buff, strlen(buff), 0, 0); |
ttajmajer | 2:d2b92fbe58dd | 47 | } |
ttajmajer | 2:d2b92fbe58dd | 48 | |
ttajmajer | 2:d2b92fbe58dd | 49 | void rst_stats(){ |
ttajmajer | 2:d2b92fbe58dd | 50 | stats_reset = true; |
ttajmajer | 2:d2b92fbe58dd | 51 | } |
ttajmajer | 2:d2b92fbe58dd | 52 | |
ttajmajer | 2:d2b92fbe58dd | 53 | int main() { |
ttajmajer | 2:d2b92fbe58dd | 54 | #define TRANSFER_SIZE 32 |
ttajmajer | 2:d2b92fbe58dd | 55 | #define CODE 0xAA |
ttajmajer | 2:d2b92fbe58dd | 56 | char rxData[TRANSFER_SIZE]; |
ttajmajer | 2:d2b92fbe58dd | 57 | Ticker status_ticker; |
ttajmajer | 2:d2b92fbe58dd | 58 | |
ttajmajer | 2:d2b92fbe58dd | 59 | radio.powerDown(); |
ttajmajer | 2:d2b92fbe58dd | 60 | radio.powerUp(); |
ttajmajer | 2:d2b92fbe58dd | 61 | |
ttajmajer | 2:d2b92fbe58dd | 62 | radio.setAirDataRate(DATA_RATE); |
ttajmajer | 2:d2b92fbe58dd | 63 | radio.setRfOutputPower(POWER); |
ttajmajer | 2:d2b92fbe58dd | 64 | radio.setRfFrequency(NRF24L01P_MIN_RF_FREQUENCY + 4 * CHANNEL); |
ttajmajer | 2:d2b92fbe58dd | 65 | |
ttajmajer | 2:d2b92fbe58dd | 66 | radio.setTransferSize(TRANSFER_SIZE); |
ttajmajer | 2:d2b92fbe58dd | 67 | radio.setCrcWidth(NRF24L01P_CRC_NONE); |
ttajmajer | 2:d2b92fbe58dd | 68 | |
ttajmajer | 2:d2b92fbe58dd | 69 | pc.baud(115200); |
ttajmajer | 2:d2b92fbe58dd | 70 | status_ticker.attach(&tick_status, 1.0); |
ttajmajer | 2:d2b92fbe58dd | 71 | button.rise(&rst_stats); |
ttajmajer | 2:d2b92fbe58dd | 72 | |
ttajmajer | 2:d2b92fbe58dd | 73 | |
ttajmajer | 2:d2b92fbe58dd | 74 | pc.printf( "=======================================\r\n"); |
ttajmajer | 2:d2b92fbe58dd | 75 | pc.printf( "CPU SystemCoreClock is : %d Hz\r\n", SystemCoreClock); |
ttajmajer | 2:d2b92fbe58dd | 76 | pc.printf( "=======================================\r\n"); |
ttajmajer | 2:d2b92fbe58dd | 77 | pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", radio.getRfFrequency() ); |
ttajmajer | 2:d2b92fbe58dd | 78 | pc.printf( "nRF24L01+ Output power : %d dBm\r\n", radio.getRfOutputPower() ); |
ttajmajer | 2:d2b92fbe58dd | 79 | pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", radio.getAirDataRate() ); |
ttajmajer | 2:d2b92fbe58dd | 80 | pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", radio.getTxAddress() ); |
ttajmajer | 2:d2b92fbe58dd | 81 | pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", radio.getRxAddress() ); |
ttajmajer | 2:d2b92fbe58dd | 82 | pc.printf( "=======================================\r\n"); |
ttajmajer | 2:d2b92fbe58dd | 83 | |
ttajmajer | 2:d2b92fbe58dd | 84 | radio.setReceiveMode(); |
ttajmajer | 2:d2b92fbe58dd | 85 | radio.enable(); |
ttajmajer | 2:d2b92fbe58dd | 86 | |
ttajmajer | 2:d2b92fbe58dd | 87 | while(1){ |
ttajmajer | 2:d2b92fbe58dd | 88 | |
ttajmajer | 2:d2b92fbe58dd | 89 | if(radio.readable()){ |
ttajmajer | 2:d2b92fbe58dd | 90 | int rx_bytes; |
ttajmajer | 2:d2b92fbe58dd | 91 | |
ttajmajer | 2:d2b92fbe58dd | 92 | rx_bytes = radio.read( NRF24L01P_PIPE_P0, rxData, sizeof(rxData)); |
ttajmajer | 2:d2b92fbe58dd | 93 | |
ttajmajer | 2:d2b92fbe58dd | 94 | if(rx_bytes < 0){ |
ttajmajer | 2:d2b92fbe58dd | 95 | pc.printf("RX ERROR!\r\n"); |
ttajmajer | 2:d2b92fbe58dd | 96 | } else{ |
ttajmajer | 2:d2b92fbe58dd | 97 | rx_packet_counter += 1; |
ttajmajer | 2:d2b92fbe58dd | 98 | rx_bit_counter += rx_bytes * 8; |
ttajmajer | 2:d2b92fbe58dd | 99 | |
ttajmajer | 2:d2b92fbe58dd | 100 | for(int i=0; i<rx_bytes; i++){ |
ttajmajer | 2:d2b92fbe58dd | 101 | int err_bits; |
ttajmajer | 2:d2b92fbe58dd | 102 | if(rxData[i] != CODE){ |
ttajmajer | 2:d2b92fbe58dd | 103 | err_bits = rxData[i] xor CODE; |
ttajmajer | 2:d2b92fbe58dd | 104 | rx_error_counter += __builtin_popcount(err_bits); |
ttajmajer | 2:d2b92fbe58dd | 105 | } |
ttajmajer | 2:d2b92fbe58dd | 106 | } |
ttajmajer | 2:d2b92fbe58dd | 107 | } |
ttajmajer | 2:d2b92fbe58dd | 108 | } |
ttajmajer | 2:d2b92fbe58dd | 109 | |
ttajmajer | 2:d2b92fbe58dd | 110 | if(stats_reset){ |
ttajmajer | 2:d2b92fbe58dd | 111 | pc.printf("=== RESETING COUNTERS ===\r\n"); |
ttajmajer | 2:d2b92fbe58dd | 112 | rx_packet_counter = 0; |
ttajmajer | 2:d2b92fbe58dd | 113 | rx_bit_counter = 0; |
ttajmajer | 2:d2b92fbe58dd | 114 | rx_error_counter = 0; |
ttajmajer | 2:d2b92fbe58dd | 115 | stats_reset = false; |
ttajmajer | 2:d2b92fbe58dd | 116 | } |
ttajmajer | 2:d2b92fbe58dd | 117 | |
ttajmajer | 2:d2b92fbe58dd | 118 | if(status){ |
ttajmajer | 2:d2b92fbe58dd | 119 | print_status(); |
ttajmajer | 2:d2b92fbe58dd | 120 | status = false; |
ttajmajer | 2:d2b92fbe58dd | 121 | } |
ttajmajer | 2:d2b92fbe58dd | 122 | } |
ttajmajer | 2:d2b92fbe58dd | 123 | } |