receiving side for swimmers

Dependencies:   mbed nRF24L01P

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?

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