Project BioRobotics Group 19
Dependencies: FastPWM HIDScope MODSERIAL QEI biquadFilter mbed
main.cpp
- Committer:
- jordiluong
- Date:
- 2017-10-23
- Revision:
- 6:246b05228f52
- Parent:
- 4:ea7689bf97e1
- Child:
- 9:c19f6f0f5080
File content as of revision 6:246b05228f52:
#include "BiQuad.h" #include "FastPWM.h" #include "HIDScope.h" #include "MODSERIAL.h" #include "mbed.h" #include "QEI.h" // SERIAL COMMUNICATION WITH PC MODSERIAL pc(USBTX, USBRX); // STATES enum states{MOTORS_OFF, MOVING, HITTING}; states currentState = MOTORS_OFF; // Start with motors off bool stateChanged = true; // Make sure the initialization of first state is executed /* // ENCODER QEI Encoder(D12,D13,NC,32); // CONNECT ENC2A TO D13, ENC2B TO D12 float vorig_omwentelingen = 0; float degrees; float vorig_degrees = 0; float omwentelingen; float counts; float snelheid_tpm; float snelheid_degps; float snelheid_tps; */ // PINS DigitalOut motor1DirectionPin(D4); // Value 0: CCW; 1: CW PwmOut motor1MagnitudePin(D5); DigitalOut motor2DirectionPin(D7); // Value 0: CW or CCW?; 1: CW or CCW? PwmOut motor2MagnitudePin(D6); InterruptIn button1(D2); // CONNECT BUT1 TO D2 InterruptIn button2(D3); // CONNECT BUT2 TO D3 AnalogIn potPin(A1); // DEFINITIONS const float motorVelocity = 4.2; // unit: rad/s const float motorGain = 8.4; // unit: (rad/s) / PWM const int motorRatio = 131; // Ratio of the gearbox in the motors int motor1State = 0; // 0: Off, 1: CW, 2: CCW float motorValue = 0; //TICKERS Ticker encoder; Ticker checkMotorState; // FUNCTIONS void RotateMotor1CW() { motor1DirectionPin = 1; //motor1MagnitudePin = fabs(motorVelocity / motorGain); motorValue = potPin; motor1MagnitudePin = motorValue; //pc.printf("Rotating motor 1 CW \r\n"); pc.printf("%f \r\n", motorValue); } void RotateMotor1CCW() { motor1DirectionPin = 0; //motor1MagnitudePin = fabs(motorVelocity / motorGain); //pc.printf("Rotating motor 1 CounterCW \r\n"); motorValue = potPin; motor1MagnitudePin = motorValue; //pc.printf("Rotating motor 1 CW \r\n"); pc.printf("%f \r\n", motorValue); } void TurnMotor1Off() { motor1MagnitudePin = 0; //pc.printf("Motors off \r\n"); } void CheckMotor1() // Checks the state of motor1 and rotates motor1 depending on the state { switch(motor1State) { case 0: // Turn motors off {TurnMotor1Off(); break;} case 1: // Rotate motor 1 CW {RotateMotor1CW(); break;} case 2: // Rotate motor 2 CCW {RotateMotor1CCW(); break;} default: break; } } /* void EncoderCalc() { counts = Encoder.getPulses()/motorRatio; degrees = counts/32*360; omwentelingen = counts/32; snelheid_tpm = (omwentelingen-vorig_omwentelingen)/0.5*60; snelheid_tps = (omwentelingen-vorig_omwentelingen)/0.5; snelheid_degps = (degrees-vorig_degrees)/0.5; vorig_omwentelingen = omwentelingen; vorig_degrees = degrees; //pc.printf("%.1f pulsen, %.2f graden, %.2f omwentelingen, %.2f tpm, %.2f tps, %.2f deg/s\r\n",counts, degrees, omwentelingen, snelheid_tpm, snelheid_tps, snelheid_degps); } */ // States function void ProcessStateMachine() { switch(currentState) { case MOTORS_OFF: { // State initialization if(stateChanged) { pc.printf("Entering MOTORS_OFF \r\n"); TurnMotor1Off(); // Turn motors off stateChanged = false; } // Home command if(!button1) { currentState = MOVING; stateChanged = true; break; } break; } case MOVING: { // State initialization if(stateChanged) { pc.printf("Entering MOVING \r\n"); stateChanged = false; } // Move commands if(!button1){motor1State = 1;} else if(!button2){motor1State = 2;} else{motor1State = 0;} /* // Hit command if(// HIT COMMAND) { currentState = HITTING; stateChanged = true; break; } */ break; } case HITTING: { // State initialization if(stateChanged) { pc.printf("Entering HITTING \r\n"); //HitBall(); // Hit the ball stateChanged = false; currentState = MOVING; stateChanged = true; break; } break; } default: { TurnMotor1Off(); // Turn motors off for safety break; } } } // Main function int main() { // Serial communication pc.baud(115200); pc.printf("START \r\n"); //encoder.attach(EncoderCalc, 0.5); checkMotorState.attach(CheckMotor1, 0.0002); while(true) { ProcessStateMachine(); // Execute states function } }