radio echo app

Dependencies:   mbed nRF24L01P

Committer:
ttajmajer
Date:
Tue Nov 15 15:49:47 2016 +0000
Revision:
3:335c4028bf36
Parent:
2:352f66e435da
Child:
4:018a8915c9e0
fixed problems with ack and retransmissions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ttajmajer 2:352f66e435da 1 #include "mbed.h"
ttajmajer 2:352f66e435da 2 #include "nRF24L01P.h"
ttajmajer 2:352f66e435da 3
ttajmajer 2:352f66e435da 4 //***************************************************************************//
ttajmajer 2:352f66e435da 5 // !!! SETTINGS !!!
ttajmajer 2:352f66e435da 6
ttajmajer 3:335c4028bf36 7 //#define DATA_RATE NRF24L01P_DATARATE_250_KBPS
ttajmajer 3:335c4028bf36 8 #define DATA_RATE NRF24L01P_DATARATE_1_MBPS
ttajmajer 2:352f66e435da 9 //#define DATA_RATE NRF24L01P_DATARATE_2_MBPS
ttajmajer 2:352f66e435da 10
ttajmajer 3:335c4028bf36 11 //#define POWER NRF24L01P_TX_PWR_ZERO_DB
ttajmajer 2:352f66e435da 12 //#define POWER NRF24L01P_TX_PWR_MINUS_6_DB
ttajmajer 2:352f66e435da 13 //#define POWER NRF24L01P_TX_PWR_MINUS_12_DB
ttajmajer 3:335c4028bf36 14 #define POWER NRF24L01P_TX_PWR_MINUS_18_DB
ttajmajer 2:352f66e435da 15
ttajmajer 2:352f66e435da 16 #define CHANNEL 0 // 0 - 30
ttajmajer 2:352f66e435da 17
ttajmajer 2:352f66e435da 18
ttajmajer 3:335c4028bf36 19 #define RX_ADDRESS ((unsigned long long) 0xABCDEF00)
ttajmajer 3:335c4028bf36 20 #define TX_ADDRESS ((unsigned long long) 0xABCDEF01)
ttajmajer 3:335c4028bf36 21 #define ECHO_DELAY 0.1
ttajmajer 2:352f66e435da 22
ttajmajer 3:335c4028bf36 23 #define TRANSFER_SIZE 32
ttajmajer 2:352f66e435da 24
ttajmajer 2:352f66e435da 25 //***************************************************************************//
ttajmajer 2:352f66e435da 26
ttajmajer 2:352f66e435da 27
ttajmajer 2:352f66e435da 28
ttajmajer 2:352f66e435da 29 Serial pc(USBTX, USBRX); // tx, rx
ttajmajer 2:352f66e435da 30 nRF24L01P radio(PB_15, PB_14, PB_13, PB_12, PB_1, PB_2); // mosi, miso, sck, csn, ce, irq
ttajmajer 2:352f66e435da 31
ttajmajer 2:352f66e435da 32
ttajmajer 2:352f66e435da 33 DigitalOut myled1(LED1);
ttajmajer 2:352f66e435da 34 InterruptIn button(USER_BUTTON);
ttajmajer 2:352f66e435da 35
ttajmajer 2:352f66e435da 36 bool send_data = false;
ttajmajer 2:352f66e435da 37
ttajmajer 2:352f66e435da 38 void send_packet(){
ttajmajer 2:352f66e435da 39 send_data = true;
ttajmajer 2:352f66e435da 40 }
ttajmajer 2:352f66e435da 41
ttajmajer 2:352f66e435da 42 int main() {
ttajmajer 2:352f66e435da 43
ttajmajer 2:352f66e435da 44
ttajmajer 2:352f66e435da 45 char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
ttajmajer 2:352f66e435da 46
ttajmajer 2:352f66e435da 47 pc.baud(115200);
ttajmajer 2:352f66e435da 48 radio.powerDown();
ttajmajer 2:352f66e435da 49 radio.powerUp();
ttajmajer 2:352f66e435da 50
ttajmajer 2:352f66e435da 51 button.rise(&send_packet);
ttajmajer 2:352f66e435da 52
ttajmajer 2:352f66e435da 53 radio.setAirDataRate(DATA_RATE);
ttajmajer 2:352f66e435da 54 radio.setRfOutputPower(POWER);
ttajmajer 2:352f66e435da 55 radio.setRfFrequency(NRF24L01P_MIN_RF_FREQUENCY + 4 * CHANNEL);
ttajmajer 3:335c4028bf36 56
ttajmajer 3:335c4028bf36 57 radio.setCrcWidth(NRF24L01P_CRC_8_BIT);
ttajmajer 3:335c4028bf36 58 radio.enableAutoAcknowledge(NRF24L01P_PIPE_P0);
ttajmajer 3:335c4028bf36 59 radio.enableAutoAcknowledge(NRF24L01P_PIPE_P1);
ttajmajer 3:335c4028bf36 60 radio.enableAutoRetransmit(0x0F, 0x0F);
ttajmajer 3:335c4028bf36 61
ttajmajer 2:352f66e435da 62 radio.setTxAddress(TX_ADDRESS, 4);
ttajmajer 3:335c4028bf36 63 radio.setRxAddress(TX_ADDRESS, 4, NRF24L01P_PIPE_P0);
ttajmajer 3:335c4028bf36 64
ttajmajer 3:335c4028bf36 65 radio.setRxAddress(RX_ADDRESS, 4, NRF24L01P_PIPE_P1);
ttajmajer 3:335c4028bf36 66
ttajmajer 2:352f66e435da 67 // Display the (default) setup of the nRF24L01+ chip
ttajmajer 2:352f66e435da 68 pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", radio.getRfFrequency() );
ttajmajer 2:352f66e435da 69 pc.printf( "nRF24L01+ Output power : %d dBm\r\n", radio.getRfOutputPower() );
ttajmajer 2:352f66e435da 70 pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", radio.getAirDataRate() );
ttajmajer 2:352f66e435da 71 pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", radio.getTxAddress() );
ttajmajer 3:335c4028bf36 72 pc.printf( "nRF24L01+ RX0 Address : 0x%010llX\r\n", radio.getRxAddress(NRF24L01P_PIPE_P0) );
ttajmajer 3:335c4028bf36 73 pc.printf( "nRF24L01+ RX1 Address : 0x%010llX\r\n", radio.getRxAddress(NRF24L01P_PIPE_P1) );
ttajmajer 2:352f66e435da 74
ttajmajer 2:352f66e435da 75
ttajmajer 3:335c4028bf36 76 radio.setTransferSize(TRANSFER_SIZE, NRF24L01P_PIPE_P0);
ttajmajer 3:335c4028bf36 77 radio.setTransferSize(TRANSFER_SIZE, NRF24L01P_PIPE_P1);
ttajmajer 2:352f66e435da 78
ttajmajer 2:352f66e435da 79 myled1 = 0;
ttajmajer 2:352f66e435da 80
ttajmajer 2:352f66e435da 81 radio.setReceiveMode();
ttajmajer 2:352f66e435da 82 radio.enable();
ttajmajer 2:352f66e435da 83
ttajmajer 2:352f66e435da 84 while (1) {
ttajmajer 3:335c4028bf36 85 int tx_bytes=0;
ttajmajer 3:335c4028bf36 86 int rx_bytes=0;
ttajmajer 2:352f66e435da 87
ttajmajer 3:335c4028bf36 88 if(radio.readable(NRF24L01P_PIPE_P1)){
ttajmajer 2:352f66e435da 89
ttajmajer 3:335c4028bf36 90 rx_bytes = radio.read(NRF24L01P_PIPE_P1, rxData, sizeof(rxData));
ttajmajer 2:352f66e435da 91 myled1 = 1;
ttajmajer 3:335c4028bf36 92 pc.printf("PING RECV\r\n");
ttajmajer 2:352f66e435da 93
ttajmajer 2:352f66e435da 94 wait(ECHO_DELAY);
ttajmajer 2:352f66e435da 95
ttajmajer 2:352f66e435da 96 tx_bytes = radio.write(NRF24L01P_PIPE_P0, txData, TRANSFER_SIZE);
ttajmajer 2:352f66e435da 97 myled1 = 0;
ttajmajer 3:335c4028bf36 98 pc.printf("PONG SEND\r\n");
ttajmajer 2:352f66e435da 99 }
ttajmajer 2:352f66e435da 100
ttajmajer 2:352f66e435da 101 if(send_data){
ttajmajer 2:352f66e435da 102 tx_bytes = radio.write(NRF24L01P_PIPE_P0, txData, TRANSFER_SIZE);
ttajmajer 2:352f66e435da 103 send_data = false;
ttajmajer 3:335c4028bf36 104 pc.printf("INIT SEND\r\n");
ttajmajer 2:352f66e435da 105 }
ttajmajer 2:352f66e435da 106
ttajmajer 3:335c4028bf36 107 if(tx_bytes < 0)
ttajmajer 3:335c4028bf36 108 pc.printf("TX ERROR\r\n");
ttajmajer 3:335c4028bf36 109
ttajmajer 3:335c4028bf36 110 if(tx_bytes > 0)
ttajmajer 3:335c4028bf36 111 pc.printf("RETR: %d\r\n", radio.getRetrCount());
ttajmajer 3:335c4028bf36 112
ttajmajer 2:352f66e435da 113 }
ttajmajer 2:352f66e435da 114 }