stuff

Dependencies:   mbed QEI BNO055 MBed_Adafruit-GPS-Library

Committer:
LukeMar
Date:
Tue Apr 23 17:52:27 2019 +0000
Revision:
2:825571dce613
Parent:
0:f4edd3407cc5
4/23/19

Who changed what in which revision?

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