http://www.rcgroups.com/forums/showthread.php?t=1995704
Use the following image to get GPS signal and supply:
NazaDecoderLib.h@0:b0ba4e08a18c, 2014-11-18 (annotated)
- Committer:
- garfield38
- Date:
- Tue Nov 18 16:39:57 2014 +0000
- Revision:
- 0:b0ba4e08a18c
- Child:
- 1:4eadcb718c8b
first release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
garfield38 | 0:b0ba4e08a18c | 1 | /* |
garfield38 | 0:b0ba4e08a18c | 2 | DJI Naza (v1, v1 Lite, V2) data decoder library |
garfield38 | 0:b0ba4e08a18c | 3 | (c) Pawelsky 20141109 |
garfield38 | 0:b0ba4e08a18c | 4 | Not for commercial use |
garfield38 | 0:b0ba4e08a18c | 5 | |
garfield38 | 0:b0ba4e08a18c | 6 | Refer to naza_decoder_wiring.jpg diagram for proper connection |
garfield38 | 0:b0ba4e08a18c | 7 | |
garfield38 | 0:b0ba4e08a18c | 8 | The RC PWM input code taken from https://www.instructables.com/id/RC-Quadrotor-Helicopter/step12/Arduino-Demo-PWM-Input/ |
garfield38 | 0:b0ba4e08a18c | 9 | */ |
garfield38 | 0:b0ba4e08a18c | 10 | |
garfield38 | 0:b0ba4e08a18c | 11 | #ifndef __NAZA_DECODER_LIB_H__ |
garfield38 | 0:b0ba4e08a18c | 12 | #define __NAZA_DECODER_LIB_H__ |
garfield38 | 0:b0ba4e08a18c | 13 | |
garfield38 | 0:b0ba4e08a18c | 14 | //#include "Arduino.h" |
garfield38 | 0:b0ba4e08a18c | 15 | #include "stdint.h" |
garfield38 | 0:b0ba4e08a18c | 16 | |
garfield38 | 0:b0ba4e08a18c | 17 | #define NAZA_MESSAGE_NONE 0x00 |
garfield38 | 0:b0ba4e08a18c | 18 | #define NAZA_MESSAGE_GPS 0x10 |
garfield38 | 0:b0ba4e08a18c | 19 | #define NAZA_MESSAGE_COMPASS 0x20 |
garfield38 | 0:b0ba4e08a18c | 20 | |
garfield38 | 0:b0ba4e08a18c | 21 | class NazaDecoderLib |
garfield38 | 0:b0ba4e08a18c | 22 | { |
garfield38 | 0:b0ba4e08a18c | 23 | public: |
garfield38 | 0:b0ba4e08a18c | 24 | typedef enum { NO_FIX = 0, FIX_2D = 2, FIX_3D = 3, FIX_DGPS = 4 } fixType_t; |
garfield38 | 0:b0ba4e08a18c | 25 | |
garfield38 | 0:b0ba4e08a18c | 26 | NazaDecoderLib(); |
garfield38 | 0:b0ba4e08a18c | 27 | |
garfield38 | 0:b0ba4e08a18c | 28 | uint8_t decode(int input); |
garfield38 | 0:b0ba4e08a18c | 29 | double getLat(); |
garfield38 | 0:b0ba4e08a18c | 30 | double getLon(); |
garfield38 | 0:b0ba4e08a18c | 31 | double getGpsAlt(); |
garfield38 | 0:b0ba4e08a18c | 32 | double getSpeed(); |
garfield38 | 0:b0ba4e08a18c | 33 | fixType_t getFixType(); |
garfield38 | 0:b0ba4e08a18c | 34 | uint8_t getNumSat(); |
garfield38 | 0:b0ba4e08a18c | 35 | double getHeadingNc(); |
garfield38 | 0:b0ba4e08a18c | 36 | double getCog(); |
garfield38 | 0:b0ba4e08a18c | 37 | double getGpsVsi(); |
garfield38 | 0:b0ba4e08a18c | 38 | double getHdop(); |
garfield38 | 0:b0ba4e08a18c | 39 | double getVdop(); |
garfield38 | 0:b0ba4e08a18c | 40 | uint8_t getYear(); |
garfield38 | 0:b0ba4e08a18c | 41 | uint8_t getMonth(); |
garfield38 | 0:b0ba4e08a18c | 42 | uint8_t getDay(); |
garfield38 | 0:b0ba4e08a18c | 43 | uint8_t getHour(); // Note that for time between 16:00 and 23:59 the hour returned from GPS module is actually 00:00 - 7:59. |
garfield38 | 0:b0ba4e08a18c | 44 | uint8_t getMinute(); |
garfield38 | 0:b0ba4e08a18c | 45 | uint8_t getSecond(); |
garfield38 | 0:b0ba4e08a18c | 46 | |
garfield38 | 0:b0ba4e08a18c | 47 | private: |
garfield38 | 0:b0ba4e08a18c | 48 | int gpsPayload[58]; |
garfield38 | 0:b0ba4e08a18c | 49 | int seq; |
garfield38 | 0:b0ba4e08a18c | 50 | int cnt; |
garfield38 | 0:b0ba4e08a18c | 51 | int msgId; |
garfield38 | 0:b0ba4e08a18c | 52 | int msgLen; |
garfield38 | 0:b0ba4e08a18c | 53 | uint8_t cs1; // checksum #1 |
garfield38 | 0:b0ba4e08a18c | 54 | uint8_t cs2; // checksum #2 |
garfield38 | 0:b0ba4e08a18c | 55 | int16_t magXMin; |
garfield38 | 0:b0ba4e08a18c | 56 | int16_t magXMax; |
garfield38 | 0:b0ba4e08a18c | 57 | int16_t magYMin; |
garfield38 | 0:b0ba4e08a18c | 58 | int16_t magYMax; |
garfield38 | 0:b0ba4e08a18c | 59 | |
garfield38 | 0:b0ba4e08a18c | 60 | double lon; // longitude in degree decimal |
garfield38 | 0:b0ba4e08a18c | 61 | double lat; // latitude in degree decimal |
garfield38 | 0:b0ba4e08a18c | 62 | double gpsAlt; // altitude in m (from GPS) |
garfield38 | 0:b0ba4e08a18c | 63 | double spd; // speed in m/s |
garfield38 | 0:b0ba4e08a18c | 64 | fixType_t fix; // fix type |
garfield38 | 0:b0ba4e08a18c | 65 | uint8_t sat; // number of satellites |
garfield38 | 0:b0ba4e08a18c | 66 | double headingNc;// heading (not tilt compensated in degrees |
garfield38 | 0:b0ba4e08a18c | 67 | double cog; // course over ground |
garfield38 | 0:b0ba4e08a18c | 68 | double gpsVsi; // vertical speed indicator (from GPS) in m/s (a.k.a. climb speed) |
garfield38 | 0:b0ba4e08a18c | 69 | double hdop; // horizontal dilution of precision |
garfield38 | 0:b0ba4e08a18c | 70 | double vdop; // vertical dilution of precision |
garfield38 | 0:b0ba4e08a18c | 71 | uint8_t year; |
garfield38 | 0:b0ba4e08a18c | 72 | uint8_t month; |
garfield38 | 0:b0ba4e08a18c | 73 | uint8_t day; |
garfield38 | 0:b0ba4e08a18c | 74 | uint8_t hour; |
garfield38 | 0:b0ba4e08a18c | 75 | uint8_t minute; |
garfield38 | 0:b0ba4e08a18c | 76 | uint8_t second; |
garfield38 | 0:b0ba4e08a18c | 77 | |
garfield38 | 0:b0ba4e08a18c | 78 | int32_t decodeLong(uint8_t idx, uint8_t mask); |
garfield38 | 0:b0ba4e08a18c | 79 | int16_t decodeShort(uint8_t idx, uint8_t mask); |
garfield38 | 0:b0ba4e08a18c | 80 | void updateCS(int input); |
garfield38 | 0:b0ba4e08a18c | 81 | |
garfield38 | 0:b0ba4e08a18c | 82 | }; |
garfield38 | 0:b0ba4e08a18c | 83 | |
garfield38 | 0:b0ba4e08a18c | 84 | extern NazaDecoderLib NazaDecoder; |
garfield38 | 0:b0ba4e08a18c | 85 | |
garfield38 | 0:b0ba4e08a18c | 86 | #endif // __NAZA_DECODER_LIB_H__ |