Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of nRF24L01P_Hello_World by
main.cpp@4:3c37c857665c, 2017-04-25 (annotated)
- Committer:
- simplyellow
- Date:
- Tue Apr 25 21:00:20 2017 +0000
- Revision:
- 4:3c37c857665c
- Parent:
- 3:bb1102948ba5
cleaned up a little;
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" |
| simplyellow | 3:bb1102948ba5 | 3 | #include <iostream> |
| simplyellow | 3:bb1102948ba5 | 4 | #include <string> |
| Owen | 0:a51a6e7da590 | 5 | |
| simplyellow | 2:d77298c11128 | 6 | #define TRANSFER_SIZE 8 |
| Owen | 0:a51a6e7da590 | 7 | |
| simplyellow | 2:d77298c11128 | 8 | Serial pc(USBTX, USBRX); // tx, rx |
| Owen | 0:a51a6e7da590 | 9 | nRF24L01P my_nrf24l01p(p5, p6, p7, p8, p9, p10); // mosi, miso, sck, csn, ce, irq |
| Owen | 0:a51a6e7da590 | 10 | DigitalOut myled1(LED1); |
| Owen | 0:a51a6e7da590 | 11 | DigitalOut myled2(LED2); |
| Owen | 0:a51a6e7da590 | 12 | |
| simplyellow | 2:d77298c11128 | 13 | char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE], acked[TRANSFER_SIZE], |
| simplyellow | 2:d77298c11128 | 14 | nacked[TRANSFER_SIZE]; |
| simplyellow | 2:d77298c11128 | 15 | bool ack = false; |
| simplyellow | 2:d77298c11128 | 16 | int txDataCnt = 0; |
| simplyellow | 2:d77298c11128 | 17 | int rxDataCnt = 0; |
| simplyellow | 3:bb1102948ba5 | 18 | |
| simplyellow | 3:bb1102948ba5 | 19 | void waitForAck() { |
| simplyellow | 3:bb1102948ba5 | 20 | //RECEIVE ACK |
| simplyellow | 3:bb1102948ba5 | 21 | if (my_nrf24l01p.readable()) { |
| simplyellow | 3:bb1102948ba5 | 22 | // ...read the data into the receive buffer |
| simplyellow | 3:bb1102948ba5 | 23 | rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof(rxData)); |
| simplyellow | 3:bb1102948ba5 | 24 | // match with ack array |
| simplyellow | 3:bb1102948ba5 | 25 | if(strcmp(rxData, acked)==-1) { |
| simplyellow | 3:bb1102948ba5 | 26 | pc.printf("ACK\n\r"); |
| simplyellow | 3:bb1102948ba5 | 27 | ack = true; |
| simplyellow | 3:bb1102948ba5 | 28 | } else { |
| simplyellow | 3:bb1102948ba5 | 29 | pc.printf("NACK\n\r"); |
| simplyellow | 3:bb1102948ba5 | 30 | ack = false; |
| simplyellow | 3:bb1102948ba5 | 31 | } |
| simplyellow | 3:bb1102948ba5 | 32 | rxDataCnt = 0; |
| simplyellow | 3:bb1102948ba5 | 33 | // Toggle LED2 (to help debug nRF24L01+ -> Host communication) |
| simplyellow | 3:bb1102948ba5 | 34 | myled2 = !myled2; |
| simplyellow | 3:bb1102948ba5 | 35 | } |
| simplyellow | 3:bb1102948ba5 | 36 | } |
| simplyellow | 3:bb1102948ba5 | 37 | |
| simplyellow | 3:bb1102948ba5 | 38 | void checkValid() { |
| simplyellow | 3:bb1102948ba5 | 39 | waitForAck(); //other code has SWITCH statement |
| simplyellow | 3:bb1102948ba5 | 40 | if(ack) {//if valid, wait til next ack |
| simplyellow | 3:bb1102948ba5 | 41 | pc.printf("valid, please wait to send again\n\r"); |
| simplyellow | 3:bb1102948ba5 | 42 | ack = false; |
| simplyellow | 3:bb1102948ba5 | 43 | while(!ack) { |
| simplyellow | 3:bb1102948ba5 | 44 | waitForAck(); |
| simplyellow | 3:bb1102948ba5 | 45 | } |
| simplyellow | 3:bb1102948ba5 | 46 | pc.printf("ready to send again\r\n"); |
| simplyellow | 3:bb1102948ba5 | 47 | } else {//if invalid |
| simplyellow | 3:bb1102948ba5 | 48 | pc.printf("invalid command, send another\n\r"); |
| simplyellow | 3:bb1102948ba5 | 49 | } |
| simplyellow | 3:bb1102948ba5 | 50 | } |
| Owen | 0:a51a6e7da590 | 51 | |
| simplyellow | 2:d77298c11128 | 52 | void send() { |
| simplyellow | 2:d77298c11128 | 53 | //SEND |
| simplyellow | 2:d77298c11128 | 54 | // If we've received anything over the host serial link... |
| simplyellow | 2:d77298c11128 | 55 | if (pc.readable()) { |
| simplyellow | 2:d77298c11128 | 56 | // ...add it to the transmit buffer |
| simplyellow | 2:d77298c11128 | 57 | txData[txDataCnt++] = pc.getc(); |
| simplyellow | 2:d77298c11128 | 58 | // If the transmit buffer is full |
| simplyellow | 2:d77298c11128 | 59 | if (txDataCnt >= sizeof(txData)) { |
| simplyellow | 2:d77298c11128 | 60 | // Send the transmitbuffer via the nRF24L01+ |
| simplyellow | 2:d77298c11128 | 61 | my_nrf24l01p.write(NRF24L01P_PIPE_P0, txData, txDataCnt); |
| simplyellow | 2:d77298c11128 | 62 | txDataCnt = 0; |
| simplyellow | 2:d77298c11128 | 63 | pc.printf("Sent command\n\r"); |
| simplyellow | 2:d77298c11128 | 64 | |
| simplyellow | 2:d77298c11128 | 65 | //wait for valid confirmation |
| simplyellow | 2:d77298c11128 | 66 | checkValid(); |
| simplyellow | 2:d77298c11128 | 67 | } |
| simplyellow | 2:d77298c11128 | 68 | // Toggle LED1 (to help debug Host -> nRF24L01+ communication) |
| simplyellow | 2:d77298c11128 | 69 | myled1 = !myled1; |
| simplyellow | 2:d77298c11128 | 70 | } |
| simplyellow | 2:d77298c11128 | 71 | } |
| Owen | 0:a51a6e7da590 | 72 | |
| simplyellow | 2:d77298c11128 | 73 | int main() { |
| simplyellow | 2:d77298c11128 | 74 | //initialize the arrays recognized as ACK and NACK |
| simplyellow | 2:d77298c11128 | 75 | for(int i = 0; i < TRANSFER_SIZE; i++) { |
| simplyellow | 2:d77298c11128 | 76 | acked[i] = '0'; |
| simplyellow | 2:d77298c11128 | 77 | nacked[i] = '1'; |
| simplyellow | 2:d77298c11128 | 78 | } |
| Owen | 0:a51a6e7da590 | 79 | my_nrf24l01p.powerUp(); |
| Owen | 0:a51a6e7da590 | 80 | // Display the (default) setup of the nRF24L01+ chip |
| simplyellow | 3:bb1102948ba5 | 81 | printf("\n\r--------\r\n"); |
| simplyellow | 3:bb1102948ba5 | 82 | printf("BASE STATION\r\n"); |
| simplyellow | 3:bb1102948ba5 | 83 | printf("Begin communications...\r\n"); |
| simplyellow | 3:bb1102948ba5 | 84 | printf("--------\r\n"); |
| Owen | 0:a51a6e7da590 | 85 | my_nrf24l01p.setTransferSize( TRANSFER_SIZE ); |
| Owen | 0:a51a6e7da590 | 86 | my_nrf24l01p.setReceiveMode(); |
| Owen | 0:a51a6e7da590 | 87 | my_nrf24l01p.enable(); |
| Owen | 0:a51a6e7da590 | 88 | |
| Owen | 0:a51a6e7da590 | 89 | while (1) { |
| simplyellow | 2:d77298c11128 | 90 | if(!ack) { |
| simplyellow | 2:d77298c11128 | 91 | waitForAck(); |
| simplyellow | 2:d77298c11128 | 92 | } else { |
| simplyellow | 2:d77298c11128 | 93 | send(); |
| simplyellow | 2:d77298c11128 | 94 | } |
| Owen | 0:a51a6e7da590 | 95 | } |
| Owen | 0:a51a6e7da590 | 96 | } |
