receiving side for swimmers

Dependencies:   mbed nRF24L01P

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?

UserRevisionLine numberNew 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 }