Receiver for rc ROV

Dependencies:   mbed nRF24L01P

Revision:
0:a8a417d50cc7
Child:
1:e11cc38ef502
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Aug 28 16:57:47 2018 +0000
@@ -0,0 +1,88 @@
+#include "mbed.h"
+#include "nRF24L01P.h"
+
+#define CHANNELS_NUMBER 12 
+#define CMD_VALUE 65535
+#define CMD_GET_STATUS 1
+//DigitalOut myled(LED1);
+
+
+#define SERVO_MAX 2500
+#define SERVO_MIN 800
+#define SERVO_CENTER SERVO_MAX-SERVO_MIN
+
+Serial pc(USBTX, USBRX); // tx, rx
+ 
+nRF24L01P radio(D11, D12, D13, D10, D9, D8);    // mosi, miso, sck, csn, ce, irq
+
+uint16_t channels[CHANNELS_NUMBER];
+uint16_t buffer  [CHANNELS_NUMBER]; 
+
+//PwmOut v_servo(PTC2);
+
+void zeroBuffer(){
+    memset(buffer, 0, sizeof(buffer));     
+}
+
+int main() {
+    //v_servo.period_us(20000);          // servo requires a 20ms period
+    //v_servo.pulsewidth_us(SERVO_CENTER);
+    //v_servo.pulsewidth_us(pulse); // servo position determined by a pulsewidth between 1-2ms
+    
+    radio.powerUp();
+    pc.baud(115200);
+    pc.printf("We all live in a yellow submarine!\r\n");
+    
+    radio.setRxAddress(0xDEADBEEF0F);
+    radio.setTxAddress(0xDEADC0DE0F);
+    radio.setRfFrequency(2405);
+    radio.powerUp();
+ 
+    pc.printf( "nRF24L01+ Frequency    : %d MHz\r\n",  radio.getRfFrequency() );
+    pc.printf( "nRF24L01+ Output power : %d dBm\r\n",  radio.getRfOutputPower() );
+    pc.printf( "nRF24L01+ Data Rate    : %d kbps\r\n", radio.getAirDataRate() );
+    pc.printf( "nRF24L01+ TX Address   : 0x%010llX\r\n", radio.getTxAddress() );
+    pc.printf( "nRF24L01+ RX Address   : 0x%010llX\r\n", radio.getRxAddress() );
+ 
+    radio.setTransferSize( CHANNELS_NUMBER*sizeof(uint16_t) );
+ 
+    radio.setReceiveMode();
+ 
+    radio.enable();
+    
+    pc.printf("Greetings, capitain!\r\n");
+    
+    while (1)
+    {
+        while( !radio.readable() );
+        {
+            int rxDataCnt = radio.read( NRF24L01P_PIPE_P0, (char*)buffer, sizeof( buffer ) );
+            
+            if (buffer[0] == CMD_VALUE) {
+                pc.printf("Command: %d\r\n", buffer[1]);
+                switch(buffer[1]){
+                    case CMD_GET_STATUS:
+                        zeroBuffer();
+                        strcpy((char*)buffer,"I'm alive");
+                        radio.setTransmitMode();
+                        //wait(0.1);
+                        int bytesWritten = radio.write( NRF24L01P_PIPE_P0, (char*)buffer, sizeof( buffer ) );
+                        if (bytesWritten<2*CHANNELS_NUMBER){
+                            pc.printf("Transmit error\r\n");
+                        } else {
+                            pc.printf("Sent telemetry: %s\r\n",(char*)buffer);
+                        }
+                        radio.setReceiveMode();
+                        //wait(0.1);
+                    break;
+                }    
+            } else {
+                for(int i=0; i<CHANNELS_NUMBER; i++){
+                    channels[i] = buffer[i];
+                }
+                pc.printf("received channels: %d %d %d %d\n\r", channels[0],channels[1],channels[2],channels[3]);
+            }
+        }
+    }
+    
+}
\ No newline at end of file