Hawk Eye
/
ROVReceiver
Receiver for rc ROV
Diff: main.cpp
- 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