ROV rc transmitter

Dependencies:   mbed nRF24L01P

Revision:
0:fb01b60e139b
Child:
1:a89ab6413920
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Aug 28 16:57:38 2018 +0000
@@ -0,0 +1,108 @@
+#include "mbed.h"
+#include "nRF24L01P.h"
+
+#define CHANNELS_NUMBER 12 
+#define CMD_VALUE 65535
+#define CMD_GET_STATUS 1
+
+nRF24L01P radio(       PB_5,    // MOSI
+                       PB_4,    // MISO
+                       PB_3,    // SCK
+                       PB_7,   // CSN
+                       PB_6,    // CE
+                       PB_8);   // IRQ
+
+
+DigitalOut myled(PA_7);
+
+AnalogIn CH1(PC_0);
+AnalogIn CH2(PC_1);
+AnalogIn CH3(PC_2);
+AnalogIn CH4(PC_3);
+
+Serial pc(PA_2, PA_3); // tx, rx
+
+uint16_t channels[CHANNELS_NUMBER]; 
+uint16_t buffer  [CHANNELS_NUMBER]; 
+
+void readChannels() {
+    channels[0]=(uint16_t)(1024*CH1.read());
+    channels[1]=(uint16_t)(1024*CH2.read());
+    channels[2]=(uint16_t)(1024*CH3.read());
+    channels[3]=(uint16_t)(1024*CH4.read());
+}
+
+void zeroBuffer(){
+    memset(buffer, 0, sizeof(buffer));     
+}
+
+void askFor(uint16_t query) {
+    zeroBuffer();
+    buffer[0] = CMD_VALUE;
+    buffer[1] = query;
+    radio.setTransmitMode();
+    int bytesWritten=radio.write( NRF24L01P_PIPE_P1, (char*)buffer, sizeof(buffer) );
+        
+    if (bytesWritten<sizeof(buffer)) {
+            pc.printf("Cmd transmit error");
+    } else {
+            pc.printf("Sent %d bytes\r\n",bytesWritten);
+    }
+    
+    
+}
+
+int main() {
+    
+    pc.baud(115200);
+    pc.format();
+    pc.printf("Hello world\r\n");
+    
+    radio.setTxAddress(0xDEADBEEF0F);
+    radio.setRxAddress(0xDEADC0DE0F);
+    radio.setRfFrequency(2405);
+    radio.setRfOutputPower(NRF24L01P_TX_PWR_MINUS_18_DB);
+    radio.powerUp();
+    pc.printf( "nRF24L01+ Frequency    : %d MHz\r\n",  radio.getRfFrequency() );
+    pc.printf( "nRF24L01+ Channel    : %d \r\n", (radio.getRfFrequency() - NRF24L01P_MIN_RF_FREQUENCY ) & 0x7F );
+    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.setTransmitMode();
+    radio.setTransferSize( CHANNELS_NUMBER*sizeof(uint16_t) );
+    radio.enable();
+    
+    //CH1.read()
+    //CH2.read()
+    //CH3.read()
+    //CH4.read()
+    
+    while(1) {
+        readChannels();
+        radio.setTransmitMode();
+         //pc.printf("Sent: %d bytes",radio.write( NRF24L01P_PIPE_P1, test, 1 ));
+        int bytesWritten=radio.write( NRF24L01P_PIPE_P0, (char*)channels, 2*CHANNELS_NUMBER );
+        
+        if (bytesWritten<2*CHANNELS_NUMBER){
+            pc.printf("Transmit error");
+        }
+        askFor(CMD_GET_STATUS);
+        //wait(0.1);
+        radio.setReceiveMode();
+        //wait(0.1);
+        while( !radio.readable() );
+        {
+            pc.printf("Availiable %d\r\n",radio.readable());
+            zeroBuffer();
+            int rxDataCnt = radio.read( NRF24L01P_PIPE_P0, (char*)buffer, sizeof( buffer ) );
+            pc.printf("Telem %s\r\n",(char*)buffer);
+        }
+        //wait(0.5);
+        
+        /*myled = 1;
+        wait(0.01);
+        myled = 0;
+        wait(0.01);*/
+    }
+}