ROV rc transmitter

Dependencies:   mbed nRF24L01P

main.cpp

Committer:
spin7ion
Date:
2018-08-28
Revision:
0:fb01b60e139b
Child:
1:a89ab6413920

File content as of revision 0:fb01b60e139b:

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