
ROV rc transmitter
Diff: main.cpp
- 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);*/ + } +}