Terrabots
/
DUMP_TRUCK_BASE_STATION
base station for dump truck
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 | } |