Firmware for UT Robotex 2018 basketball robot

Dependencies:   mbed USBDevice

Committer:
Reiko
Date:
Mon Nov 11 19:19:43 2019 +0000
Revision:
4:81cb68f1bcbd
Parent:
0:ef6268629f0b
Change default thrower (motor 3) pulsewidth_us from 800 to 100

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Reiko 0:ef6268629f0b 1 #ifndef MOTOR_H
Reiko 0:ef6268629f0b 2 #define MOTOR_H
Reiko 0:ef6268629f0b 3
Reiko 0:ef6268629f0b 4 #include "mbed.h"
Reiko 0:ef6268629f0b 5 #include "qed.h"
Reiko 0:ef6268629f0b 6
Reiko 0:ef6268629f0b 7 class Motor {
Reiko 0:ef6268629f0b 8 protected:
Reiko 0:ef6268629f0b 9 FunctionPointer stallChangeCallback;
Reiko 0:ef6268629f0b 10 FunctionPointer stallEndCallback;
Reiko 0:ef6268629f0b 11 FunctionPointer stallWarningCallback;
Reiko 0:ef6268629f0b 12 FunctionPointer stallErrorCallback;
Reiko 0:ef6268629f0b 13 public:
Reiko 0:ef6268629f0b 14 /** Create an instance of the motor connected to specfied pins, and IO-expander.
Reiko 0:ef6268629f0b 15 *
Reiko 0:ef6268629f0b 16 * @param PWMpin Pin for PWM output
Reiko 0:ef6268629f0b 17 * @param dir1 Direction 1 pin
Reiko 0:ef6268629f0b 18 * @param dir2 Direction 2 pin
Reiko 0:ef6268629f0b 19 * @param encA Encoder pin
Reiko 0:ef6268629f0b 20 * @param encB Encoder pin
Reiko 0:ef6268629f0b 21 */
Reiko 0:ef6268629f0b 22 Motor(PinName PWMpin, PinName dir1Pin, PinName dir2Pin, PinName encA, PinName encB);
Reiko 0:ef6268629f0b 23
Reiko 0:ef6268629f0b 24 /** Set speed setpoint
Reiko 0:ef6268629f0b 25 *
Reiko 0:ef6268629f0b 26 * @param newSpeed New setpoint
Reiko 0:ef6268629f0b 27 */
Reiko 0:ef6268629f0b 28 void setSpeed(int newSpeed);
Reiko 0:ef6268629f0b 29
Reiko 0:ef6268629f0b 30 /** Get current speed setpoint value */
Reiko 0:ef6268629f0b 31 int getSpeed();
Reiko 0:ef6268629f0b 32
Reiko 0:ef6268629f0b 33 /**Method that calculates appropriate PWM values for keeping motor speed close to setpoint
Reiko 0:ef6268629f0b 34 * This method shoud be called periodically (60Hz)
Reiko 0:ef6268629f0b 35 */
Reiko 0:ef6268629f0b 36 void pid();
Reiko 0:ef6268629f0b 37
Reiko 0:ef6268629f0b 38 int getStallLevel();
Reiko 0:ef6268629f0b 39
Reiko 0:ef6268629f0b 40 void stallChange(void (*function)(void));
Reiko 0:ef6268629f0b 41
Reiko 0:ef6268629f0b 42 template<typename T>
Reiko 0:ef6268629f0b 43 void stallChange(T *object, void (T::*member)(void)) {
Reiko 0:ef6268629f0b 44 stallChangeCallback.attach(object, member);
Reiko 0:ef6268629f0b 45 }
Reiko 0:ef6268629f0b 46
Reiko 0:ef6268629f0b 47 void stallEnd(void (*function)(void));
Reiko 0:ef6268629f0b 48
Reiko 0:ef6268629f0b 49 template<typename T>
Reiko 0:ef6268629f0b 50 void stallEnd(T *object, void (T::*member)(void)) {
Reiko 0:ef6268629f0b 51 stallEndCallback.attach(object, member);
Reiko 0:ef6268629f0b 52 }
Reiko 0:ef6268629f0b 53
Reiko 0:ef6268629f0b 54 void stallWarning(void (*function)(void));
Reiko 0:ef6268629f0b 55
Reiko 0:ef6268629f0b 56 template<typename T>
Reiko 0:ef6268629f0b 57 void stallWarning(T *object, void (T::*member)(void)) {
Reiko 0:ef6268629f0b 58 stallWarningCallback.attach(object, member);
Reiko 0:ef6268629f0b 59 }
Reiko 0:ef6268629f0b 60
Reiko 0:ef6268629f0b 61 void stallError(void (*function)(void));
Reiko 0:ef6268629f0b 62
Reiko 0:ef6268629f0b 63 template<typename T>
Reiko 0:ef6268629f0b 64 void stallError(T *object, void (T::*member)(void)) {
Reiko 0:ef6268629f0b 65 stallErrorCallback.attach(object, member);
Reiko 0:ef6268629f0b 66 }
Reiko 0:ef6268629f0b 67
Reiko 0:ef6268629f0b 68 private:
Reiko 0:ef6268629f0b 69 PwmOut pwm;
Reiko 0:ef6268629f0b 70 DigitalOut dir1;
Reiko 0:ef6268629f0b 71 DigitalOut dir2;
Reiko 0:ef6268629f0b 72 QED qed;
Reiko 0:ef6268629f0b 73
Reiko 0:ef6268629f0b 74 int currentSpeed;
Reiko 0:ef6268629f0b 75 int getDecoderCount();
Reiko 0:ef6268629f0b 76
Reiko 0:ef6268629f0b 77 void resetPID();
Reiko 0:ef6268629f0b 78
Reiko 0:ef6268629f0b 79 /** Set pwm duty cycle
Reiko 0:ef6268629f0b 80 *
Reiko 0:ef6268629f0b 81 * @param newPWM Duty cycle
Reiko 0:ef6268629f0b 82 */
Reiko 0:ef6268629f0b 83 void setPWM(int newPWM);
Reiko 0:ef6268629f0b 84
Reiko 0:ef6268629f0b 85 //void pid();
Reiko 0:ef6268629f0b 86
Reiko 0:ef6268629f0b 87 int setPoint;
Reiko 0:ef6268629f0b 88 int pMulti;
Reiko 0:ef6268629f0b 89 int iMulti;
Reiko 0:ef6268629f0b 90 int dMulti;
Reiko 0:ef6268629f0b 91 int error;
Reiko 0:ef6268629f0b 92 int prevError;
Reiko 0:ef6268629f0b 93 int P;
Reiko 0:ef6268629f0b 94 int I;
Reiko 0:ef6268629f0b 95 int D;
Reiko 0:ef6268629f0b 96 int minPwm;
Reiko 0:ef6268629f0b 97 int pidMulti;
Reiko 0:ef6268629f0b 98 int iMax;
Reiko 0:ef6268629f0b 99
Reiko 0:ef6268629f0b 100 int pwmPeriod;
Reiko 0:ef6268629f0b 101
Reiko 0:ef6268629f0b 102 int currentPWM;
Reiko 0:ef6268629f0b 103 int stallCount;
Reiko 0:ef6268629f0b 104 int prevStallCount;
Reiko 0:ef6268629f0b 105 int stallWarningLimit;
Reiko 0:ef6268629f0b 106 int stallErrorLimit;
Reiko 0:ef6268629f0b 107 int stallLevel;
Reiko 0:ef6268629f0b 108 };
Reiko 0:ef6268629f0b 109
Reiko 0:ef6268629f0b 110 #endif