Receiver for rc ROV

Dependencies:   mbed nRF24L01P

main.cpp

Committer:
spin7ion
Date:
2018-08-28
Revision:
0:a8a417d50cc7
Child:
1:e11cc38ef502

File content as of revision 0:a8a417d50cc7:

#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]);
            }
        }
    }
    
}