just load the code, hit reset, and turn on the rc controller while holding the button

Dependencies:   mbed

Committer:
LukeMar
Date:
Wed Nov 28 20:08:13 2018 +0000
Revision:
0:35253c4bb774
bind code

Who changed what in which revision?

UserRevisionLine numberNew 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