TRex motor controller emulator for Vives students

Dependencies:   mbed

Committer:
dwini
Date:
Thu Nov 06 10:58:59 2014 +0000
Revision:
1:a525356bd830
Parent:
0:17670db9a782
Add basic status readout of the slave. Also add automatic battery voltage decreasing in time.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dwini 0:17670db9a782 1 #ifndef TREX_HEADER
dwini 0:17670db9a782 2 #define TREX_HEADER
dwini 0:17670db9a782 3
dwini 1:a525356bd830 4 enum StatusDataPacketFields {
dwini 1:a525356bd830 5 STATUS_START = 0,
dwini 1:a525356bd830 6 STATUS_ERROR = 1,
dwini 1:a525356bd830 7 STATUS_BATTERY_MSB = 2,
dwini 1:a525356bd830 8 STATUS_BATTERY_LSB = 3,
dwini 1:a525356bd830 9 STATUS_LEFT_MOTOR_CURRENT_MSB = 4,
dwini 1:a525356bd830 10 STATUS_LEFT_MOTOR_CURRENT_LSB = 5,
dwini 1:a525356bd830 11 STATUS_LEFT_ENCODER_COUNT_MSB = 6,
dwini 1:a525356bd830 12 STATUS_LEFT_ENCODER_COUNT_LSB = 7,
dwini 1:a525356bd830 13 STATUS_RIGHT_MOTOR_CURRENT_MSB = 8,
dwini 1:a525356bd830 14 STATUS_RIGHT_MOTOR_CURRENT_LSB = 9,
dwini 1:a525356bd830 15 STATUS_RIGHT_ENCODER_COUNT_MSB = 10,
dwini 1:a525356bd830 16 STATUS_RIGHT_ENCODER_COUNT_LSB = 11,
dwini 1:a525356bd830 17 STATUS_ACCELEROMETER_X_MSB = 12,
dwini 1:a525356bd830 18 STATUS_ACCELEROMETER_X_LSB = 13,
dwini 1:a525356bd830 19 STATUS_ACCELEROMETER_Y_MSB = 14,
dwini 1:a525356bd830 20 STATUS_ACCELEROMETER_Y_LSB = 15,
dwini 1:a525356bd830 21 STATUS_ACCELEROMETER_Z_MSB = 16,
dwini 1:a525356bd830 22 STATUS_ACCELEROMETER_Z_LSB = 17,
dwini 1:a525356bd830 23 STATUS_IMPACT_X_MSB = 18,
dwini 1:a525356bd830 24 STATUS_IMPACT_X_LSB = 19,
dwini 1:a525356bd830 25 STATUS_IMPACT_Y_MSB = 20,
dwini 1:a525356bd830 26 STATUS_IMPACT_Y_LSB = 21,
dwini 1:a525356bd830 27 STATUS_IMPACT_Z_MSB = 22,
dwini 1:a525356bd830 28 STATUS_IMPACT_Z_LSB = 23
dwini 1:a525356bd830 29 };
dwini 1:a525356bd830 30
dwini 1:a525356bd830 31 enum ErrorFlag {
dwini 1:a525356bd830 32 CLEAR = 0,
dwini 1:a525356bd830 33 START_BYTE = 1,
dwini 1:a525356bd830 34 PWM_FREQ = 2,
dwini 1:a525356bd830 35 SPEED = 4,
dwini 1:a525356bd830 36 SERVO = 8,
dwini 1:a525356bd830 37 IMPACT = 16,
dwini 1:a525356bd830 38 BATTERY = 32,
dwini 1:a525356bd830 39 I2C_ADDRESS = 64,
dwini 1:a525356bd830 40 I2C_SPEED = 128
dwini 1:a525356bd830 41 };
dwini 1:a525356bd830 42
dwini 0:17670db9a782 43 class TRex {
dwini 1:a525356bd830 44 public:
dwini 1:a525356bd830 45 unsigned char startbyte;
dwini 1:a525356bd830 46 unsigned char errorflags;
dwini 1:a525356bd830 47 unsigned short batteryvoltage;
dwini 1:a525356bd830 48 unsigned short leftmotorcurrent;
dwini 1:a525356bd830 49 unsigned short rightmotorcurrent;
dwini 1:a525356bd830 50 unsigned short leftencodercount;
dwini 1:a525356bd830 51 unsigned short rightencodercount;
dwini 1:a525356bd830 52 unsigned short accelero_x;
dwini 1:a525356bd830 53 unsigned short accelero_y;
dwini 1:a525356bd830 54 unsigned short accelero_z;
dwini 1:a525356bd830 55 unsigned short impact_x;
dwini 1:a525356bd830 56 unsigned short impact_y;
dwini 1:a525356bd830 57 unsigned short impact_z;
dwini 1:a525356bd830 58
dwini 1:a525356bd830 59 /* Number of bytes in the TREX byte array representation */
dwini 1:a525356bd830 60 const static int SIZE_TREX_DATA_PACKET = 24;
dwini 0:17670db9a782 61 public:
dwini 0:17670db9a782 62 /* Constructor */
dwini 0:17670db9a782 63 TRex();
dwini 1:a525356bd830 64 void getStatusDataPacket(char * buffer);
dwini 1:a525356bd830 65 void determineBatteryVoltage(void);
dwini 1:a525356bd830 66
dwini 1:a525356bd830 67 private:
dwini 1:a525356bd830 68 void toBigEndianByteArray(char * bytes, unsigned short value);
dwini 0:17670db9a782 69 };
dwini 0:17670db9a782 70
dwini 0:17670db9a782 71
dwini 0:17670db9a782 72 #endif