receiving side for swimmers

Dependencies:   mbed nRF24L01P

Revision:
0:210056f4d794
Child:
1:29fdc2c617f8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Feb 28 14:47:46 2015 +0000
@@ -0,0 +1,106 @@
+#include "mbed.h"
+#include "nRF24L01P.h"
+
+#define BUFFER_SIZE 32//(sizeof(int)*4 + sizeof(float)*3)
+#define BAUDR 115200
+
+#define SAVING_START 'S'
+#define SAVING_STOP 'E'
+#define TRANSFER_START 'T'
+#define CHECK_READY 'R'
+#define SEND_ACK 'A'
+
+#define NACK 'N'
+#define ACK 'A'
+
+Serial pc(USBTX, USBRX);
+nRF24L01P rf(p5, p6, p7, p8, p9);
+//nRF24L01P rf(p11, p12, p13, p14, p15);
+DigitalOut led(LED1);
+
+
+void send_ack()
+{
+    char buffer[BUFFER_SIZE];
+    buffer[0] = 0x00;
+    buffer[1] = SEND_ACK;
+    
+    rf.write(NRF24L01P_PIPE_P0, buffer, BUFFER_SIZE);    
+}
+
+void check_ack()
+{
+    char buffer[BUFFER_SIZE];
+    wait_ms(10);
+    if (!rf.readable()) { 
+        printf("#%c\n", NACK);
+        return;
+    }
+
+    rf.read(NRF24L01P_PIPE_P0, buffer, BUFFER_SIZE);
+    if (buffer[0] != 0x00 || buffer[1] != SEND_ACK)
+        printf("#%c\n", NACK);
+    
+    printf("#%c\n", ACK);
+}
+
+int send_cmd(void)
+{
+    char buffer[BUFFER_SIZE];
+    char c;
+    static char last = 0;
+    
+    c = pc.getc();
+    if (c != '#' && last != 1)
+        return -1;
+    if (c == '#') {
+        last = 1;
+        return 0;    
+    }
+    
+    last = 0;
+
+    buffer[0] = 0x00;
+    buffer[1] = c;
+    rf.write(NRF24L01P_PIPE_P0, buffer, BUFFER_SIZE);
+    check_ack();
+    return 0;
+}
+
+void communication(void)
+{
+    char buffer[BUFFER_SIZE+1];
+    int bytes;
+    
+    printf("\n\nReceiving data\n\r");
+    while(1) {
+        if (pc.readable())
+            send_cmd();
+
+        bytes = rf.read(NRF24L01P_PIPE_P0, buffer, BUFFER_SIZE);
+        if (bytes <= 0)
+            continue;
+
+        send_ack();
+        buffer[bytes] = '\0';
+        printf("%s", buffer);
+    }
+}
+
+int main(void)
+{
+    pc.baud(BAUDR);
+    
+    rf.setTransferSize(BUFFER_SIZE);
+    rf.setRfOutputPower(NRF24L01P_TX_PWR_ZERO_DB);
+    rf.setAirDataRate(NRF24L01P_DATARATE_1_MBPS);
+    rf.setReceiveMode();
+    rf.enable();
+    
+    printf("Freq: %d MHz\n\r", rf.getRfFrequency());
+    printf("Power: %d dBm\n\r", rf.getRfOutputPower());
+    printf("TX Address: %llu\n\r", rf.getTxAddress());
+    printf("RX Address: %llu\n\r", rf.getRxAddress());
+    
+    communication();
+}
\ No newline at end of file