just a messy code..

Dependencies:   mbed nRF24L01P

Branch:
RF24_library_test_tx
Revision:
16:d9c8e60bfdb1
Parent:
15:07f67c448042
--- a/slave.cpp	Sat Dec 01 19:45:24 2018 +0000
+++ b/slave.cpp	Sat Dec 15 19:34:49 2018 +0000
@@ -2,13 +2,6 @@
 #include "nRF24L01P.h"
 #include "beep.h"
 
-#define PING 1
-#define PONG 2
-#define PC 3
-
-#define ROLE PONG
-#define ID 1
-
 #define nrf_CE      D2
 #define nrf_CSN     A3
 #define spi_SCK     D13
@@ -16,12 +9,20 @@
 #define spi_MISO    D12
 #define spi_IRQ     D4
 
+#define NRF_TRANSMIT    1
+#define NRF_RECEIVE     2
+
+#define NRF_ID  7
+
 #define TRANSFER_SIZE 15
 
 nRF24L01P nrf(spi_MOSI, spi_MISO, spi_SCK, nrf_CSN, nrf_CE, spi_IRQ);    // mosi, miso, sck, csn, ce, irq
 
+uint64_t rxAddr=0xDEADBEEF0F;
+uint64_t txAddr=0xDEADBEEF00;
+
 Serial pc(USBTX, USBRX);
-Serial lidar(D1, D0);
+//Serial lidar(D1, D0);
 
 PwmOut motor_RA(D9);
 PwmOut motor_RB(D10);
@@ -34,99 +35,62 @@
 AnalogIn batteryCheck(A0);
 
 void beepStart();
-void endBeep();
-void initNRF(int role);
 void dumpRFInfo();
 void turnWheel(int rspd, int lspd);
-void getPayload(int id, unsigned int count, int lspeed, int rspeed, char* txData);
-
+void initNRF(int mode, int msg_len);
 
-int main() {
-    int role = ROLE;
-    int id=0;
-    char txData[TRANSFER_SIZE];
-    int txDataCnt = 0;
+int main()
+{
     char rxData[TRANSFER_SIZE];
     int rxDataCnt = 0;
-    
-    
+
+    initNRF(NRF_RECEIVE, TRANSFER_SIZE);
     int inByteCnt = 0;
-    char buf[TRANSFER_SIZE+3];
-    
+
     beepStart();
     pc.baud(115200);
-    initNRF(role);
 //    dumpRFInfo();
-    
+    led_G = 1;
+    led_R = 1;
+
     while(1) {
-        switch(role) {
-        case PING:
-            int id = 1;
-            int lspeed=-40;
-            int rspeed=50;
-            txDataCnt++;
-            getPayload(id, txDataCnt, lspeed, rspeed, txData);
-            pc.printf("PING:%s\r\n", txData);
-            nrf.write(NRF24L01P_PIPE_P0, txData, TRANSFER_SIZE);
-            wait(0.2);
-            break;
-        case PONG:
-            if ( nrf.readable() ) {
-                rxDataCnt = nrf.read( NRF24L01P_PIPE_P0, rxData, TRANSFER_SIZE);
-                if(rxData[0] =='$') {
-                    int id = (rxData[1]-'0')*10+(rxData[2]-'0');
-                    int dataCount = (rxData[3]-'0')*10000+(rxData[4]-'0')*1000+(rxData[5]-'0')*100+(rxData[6]-'0')*10+(rxData[7]-'0');
-                    int rspd = (rxData[9]-'0')*10+(rxData[10]-'0');
-                    int lspd = (rxData[12]-'0')*10+(rxData[13]-'0');
-                    if(rxData[8]=='-')
-                        rspd = -rspd;
-                    if(rxData[11]=='-')
-                        lspd = -lspd;
-                        
-                    if(true) {
-                        turnWheel(rspd, lspd);
-                        printf("[%d] RxData: %s, rspd: %d, rspd: %d\r\n", id, rxData, rspd, lspd);
-                        char buf[] = "JUSTDUMMYREPLY";
-                        wait(0.005);
-                        nrf.setTxAddress(0xDEADBEEF00);
-                        nrf.setTransferSize( TRANSFER_SIZE );
-                        nrf.setTransmitMode();
-                        nrf.enable();
-                        nrf.write(NRF24L01P_PIPE_P0, buf, TRANSFER_SIZE);
-                        
-                        
-                        nrf.setRxAddress(0xDEADBEEF0F);
-                        nrf.powerUp();
-                        nrf.setTransferSize( TRANSFER_SIZE );
-                        nrf.setReceiveMode();
-                        nrf.enable();
-                    }
-                } else {
-                    printf("Invalid Data\r\n");
+        if ( nrf.readable() ) {
+            rxDataCnt = nrf.read( NRF24L01P_PIPE_P0, rxData, TRANSFER_SIZE);
+            if(rxData[0] =='$') {
+                int id = (rxData[1]-'0')*10+(rxData[2]-'0');
+                int dataCount = (rxData[3]-'0')*10000+(rxData[4]-'0')*1000+(rxData[5]-'0')*100+(rxData[6]-'0')*10+(rxData[7]-'0');
+                int rspd = (rxData[9]-'0')*10+(rxData[10]-'0');
+                int lspd = (rxData[12]-'0')*10+(rxData[13]-'0');
+                if(rxData[8]=='-')
+                    rspd = -rspd;
+                if(rxData[11]=='-')
+                    lspd = -lspd;
+
+                if(id==NRF_ID) {
+                    turnWheel(rspd, lspd);
+                    printf("[%d] RxData: %s, rspd: %d, rspd: %d\r\n", id, rxData, rspd, lspd);
+                    char buf[] = "JUSTDUMMYREPLY";
+                    wait(0.005);
+                    nrf.setTxAddress(0xDEADBEEF00);
+                    nrf.setTransferSize( TRANSFER_SIZE );
+                    nrf.setTransmitMode();
+                    nrf.enable();
+                    nrf.write(NRF24L01P_PIPE_P0, buf, TRANSFER_SIZE);
+
+                    nrf.setRxAddress(0xDEADBEEF0F);
+                    nrf.powerUp();
+                    nrf.setTransferSize( TRANSFER_SIZE );
+                    nrf.setReceiveMode();
+                    nrf.enable();
                 }
+            } else {
+                printf("Invalid Data\r\n");
             }
-            break;
-        case PC:
-            while(pc.readable()) {
-                char inByte = pc.getc();
-                if(inByteCnt > TRANSFER_SIZE+2) {
-                    printf("Data size overflow!\r\n");
-                    inByteCnt = 0;
-                    break;
-                } else if(inByte == '\0') {
-                    buf[inByteCnt] = '\0';
-                    printf("Command: %s\r\n", buf);
-                    nrf.write(NRF24L01P_PIPE_P0, buf, TRANSFER_SIZE);
-                    inByteCnt=0;
-                } else {
-                    buf[inByteCnt++] = inByte;
-                }
-            }
-            break;
         }
     }
 }
 
+
 void turnWheel(int rspd, int lspd)
 {
     if(rspd>0) {
@@ -156,41 +120,30 @@
     printf( "nRF24L01+ RX Address   : 0x%010llX\r\n", nrf.getRxAddress() );
 }
 
-void initNRF(int role)
+void initNRF(int mode, int msg_len)
 {
-    if(role == PING || role == PC) {
-        nrf.setTxAddress(0xDEADBEEF0F);
-        nrf.powerUp();
-        nrf.setTransferSize( TRANSFER_SIZE );
-        nrf.setTransmitMode();
-        nrf.enable();
-    } else {
-        nrf.setRxAddress(0xDEADBEEF0F);
-        nrf.powerUp();
-        nrf.setTransferSize( TRANSFER_SIZE );
-        nrf.setReceiveMode();
-        nrf.enable();
+#ifndef NRF_FIRST_INIT
+#define NRF_FIRST_INIT
+    nrf.setTxAddress(txAddr);
+    nrf.setRxAddress(rxAddr);
+    nrf.powerUp();
+#endif
+    switch(mode) {
+        case NRF_TRANSMIT:
+            nrf.setTransferSize(msg_len);
+            nrf.setTransmitMode();
+            nrf.enable();
+            break;
+        case NRF_RECEIVE:
+            nrf.setTransferSize(msg_len);
+            nrf.setReceiveMode();
+            nrf.enable();
+            break;
+        default:
+            printf("Invalid NRF Mode\r\n");
     }
 }
 
-void getPayload(int id, unsigned int count, int lspeed, int rspeed, char* txData)
-{
-    *(txData+0) = '$';
-    *(txData+1) = id/10+'0';
-    *(txData+2) = id%10+'0';
-    *(txData+3) = count/10000+'0';
-    *(txData+4) = count/1000%10+'0';
-    *(txData+5) = count/100%10+'0';
-    *(txData+6) = count/10%10+'0';
-    *(txData+7) = count%10+'0';
-    *(txData+8) = lspeed>0?'+':'-';
-    *(txData+9) = abs(lspeed)/10+'0';
-    *(txData+10) = abs(lspeed)%10+'0';
-    *(txData+11) = rspeed>0?'+':'-';
-    *(txData+12) = abs(rspeed)/10+'0';
-    *(txData+13) = abs(rspeed)%10+'0';
-    *(txData+14) = '\0';
-}
 
 /*
 xxyyyyyabbcddn