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