3/18/19
Dependencies: mbed BNO055 MBed_Adafruit-GPS-Library
Spektrum.h@1:87f1199672a1, 2019-03-18 (annotated)
- Committer:
- LukeMar
- Date:
- Mon Mar 18 04:06:52 2019 +0000
- Revision:
- 1:87f1199672a1
- Parent:
- 0:f4edd3407cc5
Stepper CAN node
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
LukeMar | 0:f4edd3407cc5 | 1 | /* |
LukeMar | 0:f4edd3407cc5 | 2 | Spektrum.h |
LukeMar | 0:f4edd3407cc5 | 3 | Spektrum serial receiver mbed library |
LukeMar | 0:f4edd3407cc5 | 4 | Dennis Evangelista, 2018 |
LukeMar | 0:f4edd3407cc5 | 5 | */ |
LukeMar | 0:f4edd3407cc5 | 6 | |
LukeMar | 0:f4edd3407cc5 | 7 | #ifndef SPEKTRUM_H |
LukeMar | 0:f4edd3407cc5 | 8 | #define SPEKTRUM_H |
LukeMar | 0:f4edd3407cc5 | 9 | #define SPEKTRUM_VERSION "1.0.1" |
LukeMar | 0:f4edd3407cc5 | 10 | |
LukeMar | 0:f4edd3407cc5 | 11 | #include "mbed.h" |
LukeMar | 0:f4edd3407cc5 | 12 | #include "rtos.h" |
LukeMar | 0:f4edd3407cc5 | 13 | |
LukeMar | 0:f4edd3407cc5 | 14 | // bind modes |
LukeMar | 0:f4edd3407cc5 | 15 | #define SPEKTRUM_INT_DSMX_22MS 7 |
LukeMar | 0:f4edd3407cc5 | 16 | #define SPEKTRUM_EXT_DSMX_22MS 8 |
LukeMar | 0:f4edd3407cc5 | 17 | #define SPEKTRUM_INT_DSMX_11MS 9 |
LukeMar | 0:f4edd3407cc5 | 18 | #define SPEKTRUM_EXT_DSMX_11MS 10 |
LukeMar | 0:f4edd3407cc5 | 19 | // DSM2 bind modes not recommended, not implemented |
LukeMar | 0:f4edd3407cc5 | 20 | // EXT(ernal) bind modes don't really work on solitary satellite receiver |
LukeMar | 0:f4edd3407cc5 | 21 | |
LukeMar | 0:f4edd3407cc5 | 22 | // field definitions |
LukeMar | 0:f4edd3407cc5 | 23 | // #define SPEKTRUM_MASK_1024_CHANID 0xfc00 |
LukeMar | 0:f4edd3407cc5 | 24 | // #define SPEKTRUM_MASK_1024_SXPOS 0x03ff |
LukeMar | 0:f4edd3407cc5 | 25 | // first two only used in DSM2 which are not implemented |
LukeMar | 0:f4edd3407cc5 | 26 | #define SPEKTRUM_MASK_2048_CHANID 0x7800 |
LukeMar | 0:f4edd3407cc5 | 27 | #define SPEKTRUM_MASK_2048_CHANID_MSB 0x78 |
LukeMar | 0:f4edd3407cc5 | 28 | #define SPEKTRUM_MASK_2048_SXPOS 0x07ff |
LukeMar | 0:f4edd3407cc5 | 29 | |
LukeMar | 0:f4edd3407cc5 | 30 | // allowable system field values |
LukeMar | 0:f4edd3407cc5 | 31 | // #define SPEKTRUM_22MS_1024_DSM2 0x01 |
LukeMar | 0:f4edd3407cc5 | 32 | // #define SPEKTRUM_11MS_2048_DSM2 0x12 |
LukeMar | 0:f4edd3407cc5 | 33 | #define SPEKTRUM_22MS_2048_DSMX 0xa2 |
LukeMar | 0:f4edd3407cc5 | 34 | #define SPEKTRUM_11MS_2048_DSMX 0xb2 |
LukeMar | 0:f4edd3407cc5 | 35 | |
LukeMar | 0:f4edd3407cc5 | 36 | #define SPEKTRUM_BAUD 115200 |
LukeMar | 0:f4edd3407cc5 | 37 | // Spektrum baud is supposed to be 125000, but the LPC1768 seems not |
LukeMar | 0:f4edd3407cc5 | 38 | // to support nonstandard baud rates. |
LukeMar | 0:f4edd3407cc5 | 39 | |
LukeMar | 0:f4edd3407cc5 | 40 | #define SPEKTRUM_SERVOS 7 |
LukeMar | 0:f4edd3407cc5 | 41 | #define SPEKTRUM_PACKET_SIZE 16 |
LukeMar | 0:f4edd3407cc5 | 42 | #define SPEKTRUM_CHANNELS 16 |
LukeMar | 0:f4edd3407cc5 | 43 | #define SPEKTRUM_COUNT2US(x) (x*600/1024+900) |
LukeMar | 0:f4edd3407cc5 | 44 | |
LukeMar | 0:f4edd3407cc5 | 45 | |
LukeMar | 0:f4edd3407cc5 | 46 | |
LukeMar | 0:f4edd3407cc5 | 47 | |
LukeMar | 0:f4edd3407cc5 | 48 | /** Spektrum receiver object for connecting to eg SPM9745 receiver |
LukeMar | 0:f4edd3407cc5 | 49 | */ |
LukeMar | 0:f4edd3407cc5 | 50 | class Spektrum |
LukeMar | 0:f4edd3407cc5 | 51 | { |
LukeMar | 0:f4edd3407cc5 | 52 | public: |
LukeMar | 0:f4edd3407cc5 | 53 | /** Number of fades (failed packets) from receiver */ |
LukeMar | 0:f4edd3407cc5 | 54 | unsigned int fades; |
LukeMar | 0:f4edd3407cc5 | 55 | |
LukeMar | 0:f4edd3407cc5 | 56 | /** Tells if system is in DSMX 11ms or 22ms for example */ |
LukeMar | 0:f4edd3407cc5 | 57 | unsigned int system; |
LukeMar | 0:f4edd3407cc5 | 58 | |
LukeMar | 0:f4edd3407cc5 | 59 | /** Contains 0-2048 values for all channels 0-15 */ |
LukeMar | 0:f4edd3407cc5 | 60 | unsigned int channel[SPEKTRUM_CHANNELS]; |
LukeMar | 0:f4edd3407cc5 | 61 | |
LukeMar | 0:f4edd3407cc5 | 62 | /** Contains approx 900-2100us pulsewidths corresponding to chan 0-15 */ |
LukeMar | 0:f4edd3407cc5 | 63 | unsigned int pulsewidth[SPEKTRUM_CHANNELS]; |
LukeMar | 0:f4edd3407cc5 | 64 | |
LukeMar | 0:f4edd3407cc5 | 65 | /** If true, data is value */ |
LukeMar | 0:f4edd3407cc5 | 66 | bool valid; // TODO switch to EventFlags? |
LukeMar | 0:f4edd3407cc5 | 67 | |
LukeMar | 0:f4edd3407cc5 | 68 | /** 11 or 22 ms */ |
LukeMar | 0:f4edd3407cc5 | 69 | unsigned int period_ms; |
LukeMar | 0:f4edd3407cc5 | 70 | |
LukeMar | 0:f4edd3407cc5 | 71 | Spektrum(PinName tx, PinName rx); // constructor |
LukeMar | 0:f4edd3407cc5 | 72 | ~Spektrum(); // destructor |
LukeMar | 0:f4edd3407cc5 | 73 | |
LukeMar | 0:f4edd3407cc5 | 74 | private: |
LukeMar | 0:f4edd3407cc5 | 75 | UARTSerial _rx; |
LukeMar | 0:f4edd3407cc5 | 76 | unsigned char _buf[SPEKTRUM_PACKET_SIZE]; |
LukeMar | 0:f4edd3407cc5 | 77 | Thread _packet_thread; |
LukeMar | 0:f4edd3407cc5 | 78 | void _packet_callback(void); |
LukeMar | 0:f4edd3407cc5 | 79 | }; |
LukeMar | 0:f4edd3407cc5 | 80 | |
LukeMar | 0:f4edd3407cc5 | 81 | |
LukeMar | 0:f4edd3407cc5 | 82 | |
LukeMar | 0:f4edd3407cc5 | 83 | |
LukeMar | 0:f4edd3407cc5 | 84 | |
LukeMar | 0:f4edd3407cc5 | 85 | |
LukeMar | 0:f4edd3407cc5 | 86 | |
LukeMar | 0:f4edd3407cc5 | 87 | /** For binding a Spektrum receiver to transmitter */ |
LukeMar | 0:f4edd3407cc5 | 88 | class BindPlug |
LukeMar | 0:f4edd3407cc5 | 89 | { |
LukeMar | 0:f4edd3407cc5 | 90 | public: |
LukeMar | 0:f4edd3407cc5 | 91 | /** e.g. SPEKTRUM_INT_DSMX_11MS, SPEKTRUM_INT_DSMX_22MS */ |
LukeMar | 0:f4edd3407cc5 | 92 | int mode; |
LukeMar | 0:f4edd3407cc5 | 93 | |
LukeMar | 0:f4edd3407cc5 | 94 | BindPlug(PinName tx, PinName rx, int mode = SPEKTRUM_INT_DSMX_11MS); |
LukeMar | 0:f4edd3407cc5 | 95 | ~BindPlug(); |
LukeMar | 0:f4edd3407cc5 | 96 | void bind(); |
LukeMar | 0:f4edd3407cc5 | 97 | |
LukeMar | 0:f4edd3407cc5 | 98 | private: |
LukeMar | 0:f4edd3407cc5 | 99 | DigitalOut _3Vpin; |
LukeMar | 0:f4edd3407cc5 | 100 | DigitalOut _datapin; |
LukeMar | 0:f4edd3407cc5 | 101 | }; |
LukeMar | 0:f4edd3407cc5 | 102 | |
LukeMar | 0:f4edd3407cc5 | 103 | /* LATER |
LukeMar | 0:f4edd3407cc5 | 104 | class SpektrumTestDevice{ |
LukeMar | 0:f4edd3407cc5 | 105 | public: |
LukeMar | 0:f4edd3407cc5 | 106 | unsigned int fades; |
LukeMar | 0:f4edd3407cc5 | 107 | unsigned int servo[7]; |
LukeMar | 0:f4edd3407cc5 | 108 | SpektrumTestDevice(PinName tx, PinName rx); |
LukeMar | 0:f4edd3407cc5 | 109 | ~SpektrumTestDevice(); |
LukeMar | 0:f4edd3407cc5 | 110 | private: |
LukeMar | 0:f4edd3407cc5 | 111 | Serial _receiver; |
LukeMar | 0:f4edd3407cc5 | 112 | }; |
LukeMar | 0:f4edd3407cc5 | 113 | */ |
LukeMar | 0:f4edd3407cc5 | 114 | |
LukeMar | 0:f4edd3407cc5 | 115 | #endif |