#ifndef RADIOH #define RADIOH #include #include #include #include enum dataFields { AXIS1=0, AXIS2, AXIS3, AXIS4, POT, MODE1, MODE2, MOMENTARY1, MOMENTARY2, FAILSAFE, DUMMY, LASTDATAFIELD }; class RcData { const byte dummy; uint8_t dataArray[LASTDATAFIELD]; public: RcData():dummy(0xAA) { // All axes to neutral position clearData(); } byte axis1; byte axis2; byte axis3; byte axis4; byte pot; bool mode1; bool mode2; bool momentary1; // Momentary push button bool momentary2; bool failsafe; //return data int voltage; bool batteryOk; int dx; int dy; int dz; void setfailsafe( void) { failsafe = true; clearData(); } void clearFailsafe( void ) { failsafe = false; } bool getfailsafe( void ) { return failsafe; } void clearData( void ) { axis1 = 50; axis2 = 50; axis3 = 50; axis4 = 50; pot = 50; batteryOk = true; mode1 = false; mode2 = false; momentary2 = false; momentary1 = false; failsafe = false; voltage = 0; dx=0; dy=0; dz=0; } uint8_t* getByteArray( void ) { dataArray[AXIS1] = axis1; dataArray[AXIS2] = axis2; dataArray[AXIS3] = axis3; dataArray[AXIS4] = axis4; dataArray[MODE1] = mode1; dataArray[MODE2] = mode2; dataArray[POT] = pot; dataArray[MOMENTARY1] = uint8_t (momentary1); dataArray[MOMENTARY2] = uint8_t (momentary2); dataArray[FAILSAFE] = byte (failsafe); dataArray[DUMMY] = dummy; return dataArray; } uint8_t* getReturnData( void ) { dataArray[0] = voltage; dataArray[1] = dx; dataArray[2] = dy; dataArray[3] = dz; dataArray[4] = 0; dataArray[5] = 0; dataArray[6] = 0; dataArray[7] = 0; dataArray[DUMMY] = dummy; return dataArray; } bool setRcData( uint8_t* buf ) { if (dataArray[DUMMY] == dummy) { axis1 = dataArray[AXIS1]; axis2 = dataArray[AXIS2]; axis3 = dataArray[AXIS3]; axis4 = dataArray[AXIS4]; mode1 = dataArray[MODE1]; mode2 = dataArray[MODE2]; pot = dataArray[POT]; momentary1 = bool(dataArray[MOMENTARY1]); momentary2 = bool(dataArray[MOMENTARY2]); failsafe = bool(dataArray[FAILSAFE]); return true; } return false; } void setVoltage( int volt) { voltage = volt; } }; class radio_c { uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN]; // Create an instance of the radio driver RH_NRF24 RadioDriver; // Sets the radio driver to NRF24 and the client address to 1 RHReliableDatagram RadioManager; int m_myaddress; unsigned long lastRecvTime; bool open = false; public: radio_c(int address, int CE, int CSN) :RadioDriver(CE, CSN), RadioManager(RadioDriver, address) {}; void begin( void ); bool transmitData( void ); bool receiveData( void ); }; void sendSerialCommands( void ); RcData* getDataptr( void ); #endif //RADIOH