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.
main.cpp@2:528f274c6fed, 2015-03-17 (annotated)
- Committer:
- jkaderka
- Date:
- Tue Mar 17 19:03:25 2015 +0000
- Revision:
- 2:528f274c6fed
- Parent:
- 1:29fdc2c617f8
ACK disabled
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| jkaderka | 0:210056f4d794 | 1 | #include "mbed.h" |
| jkaderka | 0:210056f4d794 | 2 | #include "nRF24L01P.h" |
| jkaderka | 0:210056f4d794 | 3 | |
| jkaderka | 1:29fdc2c617f8 | 4 | #define BUFFER_SIZE (sizeof(int)*4 + sizeof(float)*3) |
| jkaderka | 0:210056f4d794 | 5 | #define BAUDR 115200 |
| jkaderka | 0:210056f4d794 | 6 | |
| jkaderka | 0:210056f4d794 | 7 | #define SAVING_START 'S' |
| jkaderka | 0:210056f4d794 | 8 | #define SAVING_STOP 'E' |
| jkaderka | 0:210056f4d794 | 9 | #define TRANSFER_START 'T' |
| jkaderka | 0:210056f4d794 | 10 | #define CHECK_READY 'R' |
| jkaderka | 0:210056f4d794 | 11 | #define SEND_ACK 'A' |
| jkaderka | 0:210056f4d794 | 12 | |
| jkaderka | 0:210056f4d794 | 13 | #define NACK 'N' |
| jkaderka | 0:210056f4d794 | 14 | #define ACK 'A' |
| jkaderka | 0:210056f4d794 | 15 | |
| jkaderka | 0:210056f4d794 | 16 | Serial pc(USBTX, USBRX); |
| jkaderka | 0:210056f4d794 | 17 | nRF24L01P rf(p5, p6, p7, p8, p9); |
| jkaderka | 0:210056f4d794 | 18 | //nRF24L01P rf(p11, p12, p13, p14, p15); |
| jkaderka | 0:210056f4d794 | 19 | DigitalOut led(LED1); |
| jkaderka | 0:210056f4d794 | 20 | |
| jkaderka | 0:210056f4d794 | 21 | |
| jkaderka | 0:210056f4d794 | 22 | void send_ack() |
| jkaderka | 0:210056f4d794 | 23 | { |
| jkaderka | 0:210056f4d794 | 24 | char buffer[BUFFER_SIZE]; |
| jkaderka | 0:210056f4d794 | 25 | buffer[0] = 0x00; |
| jkaderka | 0:210056f4d794 | 26 | buffer[1] = SEND_ACK; |
| jkaderka | 0:210056f4d794 | 27 | |
| jkaderka | 0:210056f4d794 | 28 | rf.write(NRF24L01P_PIPE_P0, buffer, BUFFER_SIZE); |
| jkaderka | 0:210056f4d794 | 29 | } |
| jkaderka | 0:210056f4d794 | 30 | |
| jkaderka | 0:210056f4d794 | 31 | void check_ack() |
| jkaderka | 0:210056f4d794 | 32 | { |
| jkaderka | 0:210056f4d794 | 33 | char buffer[BUFFER_SIZE]; |
| jkaderka | 0:210056f4d794 | 34 | wait_ms(10); |
| jkaderka | 0:210056f4d794 | 35 | if (!rf.readable()) { |
| jkaderka | 0:210056f4d794 | 36 | printf("#%c\n", NACK); |
| jkaderka | 0:210056f4d794 | 37 | return; |
| jkaderka | 0:210056f4d794 | 38 | } |
| jkaderka | 0:210056f4d794 | 39 | |
| jkaderka | 0:210056f4d794 | 40 | rf.read(NRF24L01P_PIPE_P0, buffer, BUFFER_SIZE); |
| jkaderka | 0:210056f4d794 | 41 | if (buffer[0] != 0x00 || buffer[1] != SEND_ACK) |
| jkaderka | 0:210056f4d794 | 42 | printf("#%c\n", NACK); |
| jkaderka | 0:210056f4d794 | 43 | |
| jkaderka | 0:210056f4d794 | 44 | printf("#%c\n", ACK); |
| jkaderka | 0:210056f4d794 | 45 | } |
| jkaderka | 0:210056f4d794 | 46 | |
| jkaderka | 0:210056f4d794 | 47 | int send_cmd(void) |
| jkaderka | 0:210056f4d794 | 48 | { |
| jkaderka | 0:210056f4d794 | 49 | char buffer[BUFFER_SIZE]; |
| jkaderka | 0:210056f4d794 | 50 | char c; |
| jkaderka | 0:210056f4d794 | 51 | static char last = 0; |
| jkaderka | 0:210056f4d794 | 52 | |
| jkaderka | 0:210056f4d794 | 53 | c = pc.getc(); |
| jkaderka | 0:210056f4d794 | 54 | if (c != '#' && last != 1) |
| jkaderka | 0:210056f4d794 | 55 | return -1; |
| jkaderka | 0:210056f4d794 | 56 | if (c == '#') { |
| jkaderka | 0:210056f4d794 | 57 | last = 1; |
| jkaderka | 0:210056f4d794 | 58 | return 0; |
| jkaderka | 0:210056f4d794 | 59 | } |
| jkaderka | 0:210056f4d794 | 60 | |
| jkaderka | 0:210056f4d794 | 61 | last = 0; |
| jkaderka | 0:210056f4d794 | 62 | |
| jkaderka | 0:210056f4d794 | 63 | buffer[0] = 0x00; |
| jkaderka | 0:210056f4d794 | 64 | buffer[1] = c; |
| jkaderka | 0:210056f4d794 | 65 | rf.write(NRF24L01P_PIPE_P0, buffer, BUFFER_SIZE); |
| jkaderka | 0:210056f4d794 | 66 | check_ack(); |
| jkaderka | 0:210056f4d794 | 67 | return 0; |
| jkaderka | 0:210056f4d794 | 68 | } |
| jkaderka | 0:210056f4d794 | 69 | |
| jkaderka | 0:210056f4d794 | 70 | void communication(void) |
| jkaderka | 0:210056f4d794 | 71 | { |
| jkaderka | 1:29fdc2c617f8 | 72 | char rxBuf[BUFFER_SIZE+1]; |
| jkaderka | 0:210056f4d794 | 73 | int bytes; |
| jkaderka | 1:29fdc2c617f8 | 74 | int counter, acc_x, acc_y, acc_z; |
| jkaderka | 1:29fdc2c617f8 | 75 | float gyro_x, gyro_y, gyro_z; |
| jkaderka | 0:210056f4d794 | 76 | |
| jkaderka | 0:210056f4d794 | 77 | printf("\n\nReceiving data\n\r"); |
| jkaderka | 0:210056f4d794 | 78 | while(1) { |
| jkaderka | 0:210056f4d794 | 79 | if (pc.readable()) |
| jkaderka | 0:210056f4d794 | 80 | send_cmd(); |
| jkaderka | 0:210056f4d794 | 81 | |
| jkaderka | 1:29fdc2c617f8 | 82 | bytes = rf.read(NRF24L01P_PIPE_P0, rxBuf, BUFFER_SIZE); |
| jkaderka | 0:210056f4d794 | 83 | if (bytes <= 0) |
| jkaderka | 0:210056f4d794 | 84 | continue; |
| jkaderka | 0:210056f4d794 | 85 | |
| jkaderka | 2:528f274c6fed | 86 | //send_ack(); |
| jkaderka | 1:29fdc2c617f8 | 87 | |
| jkaderka | 1:29fdc2c617f8 | 88 | counter = *((int *) rxBuf); |
| jkaderka | 1:29fdc2c617f8 | 89 | acc_x = *((int *) &rxBuf[sizeof(int)]); |
| jkaderka | 1:29fdc2c617f8 | 90 | acc_y = *((int *) &rxBuf[sizeof(int)*2]); |
| jkaderka | 1:29fdc2c617f8 | 91 | acc_z = *((int *) &rxBuf[sizeof(int)*3]); |
| jkaderka | 1:29fdc2c617f8 | 92 | gyro_x = *((float *) &rxBuf[sizeof(int)*4]); |
| jkaderka | 1:29fdc2c617f8 | 93 | gyro_y = *((float *) &rxBuf[sizeof(int)*4 + sizeof(float)]); |
| jkaderka | 1:29fdc2c617f8 | 94 | gyro_z = *((float *) &rxBuf[sizeof(int)*4 + sizeof(float)*2]); |
| jkaderka | 1:29fdc2c617f8 | 95 | |
| jkaderka | 1:29fdc2c617f8 | 96 | /* transmission start */ |
| jkaderka | 1:29fdc2c617f8 | 97 | if (counter == -1 && acc_x >= 0) { |
| jkaderka | 1:29fdc2c617f8 | 98 | printf("Swimmer id: %d\n", acc_x); |
| jkaderka | 1:29fdc2c617f8 | 99 | continue; |
| jkaderka | 1:29fdc2c617f8 | 100 | } |
| jkaderka | 1:29fdc2c617f8 | 101 | if (counter == -1 && acc_x == -1) { |
| jkaderka | 1:29fdc2c617f8 | 102 | printf("End of DATA\n"); |
| jkaderka | 1:29fdc2c617f8 | 103 | continue; |
| jkaderka | 1:29fdc2c617f8 | 104 | } |
| jkaderka | 1:29fdc2c617f8 | 105 | printf("%d %d %d %d %f %f %f\n", counter, acc_x, acc_y, acc_z, gyro_x, gyro_y, gyro_z); |
| jkaderka | 0:210056f4d794 | 106 | } |
| jkaderka | 0:210056f4d794 | 107 | } |
| jkaderka | 0:210056f4d794 | 108 | |
| jkaderka | 0:210056f4d794 | 109 | int main(void) |
| jkaderka | 0:210056f4d794 | 110 | { |
| jkaderka | 0:210056f4d794 | 111 | pc.baud(BAUDR); |
| jkaderka | 0:210056f4d794 | 112 | |
| jkaderka | 0:210056f4d794 | 113 | rf.setTransferSize(BUFFER_SIZE); |
| jkaderka | 0:210056f4d794 | 114 | rf.setRfOutputPower(NRF24L01P_TX_PWR_ZERO_DB); |
| jkaderka | 1:29fdc2c617f8 | 115 | rf.setAirDataRate(NRF24L01P_DATARATE_2_MBPS); |
| jkaderka | 0:210056f4d794 | 116 | rf.setReceiveMode(); |
| jkaderka | 0:210056f4d794 | 117 | rf.enable(); |
| jkaderka | 0:210056f4d794 | 118 | |
| jkaderka | 0:210056f4d794 | 119 | printf("Freq: %d MHz\n\r", rf.getRfFrequency()); |
| jkaderka | 0:210056f4d794 | 120 | printf("Power: %d dBm\n\r", rf.getRfOutputPower()); |
| jkaderka | 0:210056f4d794 | 121 | printf("TX Address: %llu\n\r", rf.getTxAddress()); |
| jkaderka | 0:210056f4d794 | 122 | printf("RX Address: %llu\n\r", rf.getRxAddress()); |
| jkaderka | 0:210056f4d794 | 123 | |
| jkaderka | 0:210056f4d794 | 124 | communication(); |
| jkaderka | 0:210056f4d794 | 125 | } |