Bender Robotics
/
plavci_pc_side
receiving side for swimmers
main.cpp@0:210056f4d794, 2015-02-28 (annotated)
- Committer:
- jkaderka
- Date:
- Sat Feb 28 14:47:46 2015 +0000
- Revision:
- 0:210056f4d794
- Child:
- 1:29fdc2c617f8
first commit
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 | 0:210056f4d794 | 4 | #define BUFFER_SIZE 32//(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 | 0:210056f4d794 | 72 | char buffer[BUFFER_SIZE+1]; |
jkaderka | 0:210056f4d794 | 73 | int bytes; |
jkaderka | 0:210056f4d794 | 74 | |
jkaderka | 0:210056f4d794 | 75 | printf("\n\nReceiving data\n\r"); |
jkaderka | 0:210056f4d794 | 76 | while(1) { |
jkaderka | 0:210056f4d794 | 77 | if (pc.readable()) |
jkaderka | 0:210056f4d794 | 78 | send_cmd(); |
jkaderka | 0:210056f4d794 | 79 | |
jkaderka | 0:210056f4d794 | 80 | bytes = rf.read(NRF24L01P_PIPE_P0, buffer, BUFFER_SIZE); |
jkaderka | 0:210056f4d794 | 81 | if (bytes <= 0) |
jkaderka | 0:210056f4d794 | 82 | continue; |
jkaderka | 0:210056f4d794 | 83 | |
jkaderka | 0:210056f4d794 | 84 | send_ack(); |
jkaderka | 0:210056f4d794 | 85 | buffer[bytes] = '\0'; |
jkaderka | 0:210056f4d794 | 86 | printf("%s", buffer); |
jkaderka | 0:210056f4d794 | 87 | } |
jkaderka | 0:210056f4d794 | 88 | } |
jkaderka | 0:210056f4d794 | 89 | |
jkaderka | 0:210056f4d794 | 90 | int main(void) |
jkaderka | 0:210056f4d794 | 91 | { |
jkaderka | 0:210056f4d794 | 92 | pc.baud(BAUDR); |
jkaderka | 0:210056f4d794 | 93 | |
jkaderka | 0:210056f4d794 | 94 | rf.setTransferSize(BUFFER_SIZE); |
jkaderka | 0:210056f4d794 | 95 | rf.setRfOutputPower(NRF24L01P_TX_PWR_ZERO_DB); |
jkaderka | 0:210056f4d794 | 96 | rf.setAirDataRate(NRF24L01P_DATARATE_1_MBPS); |
jkaderka | 0:210056f4d794 | 97 | rf.setReceiveMode(); |
jkaderka | 0:210056f4d794 | 98 | rf.enable(); |
jkaderka | 0:210056f4d794 | 99 | |
jkaderka | 0:210056f4d794 | 100 | printf("Freq: %d MHz\n\r", rf.getRfFrequency()); |
jkaderka | 0:210056f4d794 | 101 | printf("Power: %d dBm\n\r", rf.getRfOutputPower()); |
jkaderka | 0:210056f4d794 | 102 | printf("TX Address: %llu\n\r", rf.getTxAddress()); |
jkaderka | 0:210056f4d794 | 103 | printf("RX Address: %llu\n\r", rf.getRxAddress()); |
jkaderka | 0:210056f4d794 | 104 | |
jkaderka | 0:210056f4d794 | 105 | communication(); |
jkaderka | 0:210056f4d794 | 106 | } |