changes to motor library
Fork of motor by
Diff: motor.cpp
- Revision:
- 0:b0476dcfa14c
- Child:
- 1:09226806dd15
diff -r 000000000000 -r b0476dcfa14c motor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/motor.cpp Tue Oct 18 14:57:55 2016 +0000 @@ -0,0 +1,174 @@ +#include "mbed.h" +#include "TFC.h" +DigitalOut myled(LED1); + +int motor_setup(); +void TurnOn(); +void RunMotor(); +void DefaultMode(); + + +//Speed control +void Acc(float& motorA, float& motorB); +void Decc(float& motorA, float& motorB); +void StartLine(); + +//Corner Control + +void PWM_cornerCntrl(bool a,float pwmRatio); +void cornerLeft(float speed); +void cornerRight(float speed); + + +//int cornerPwmControl;// this sets the cornering percentage ratio. value between 100 and 0. + // 100 means both motors run at the same speed. 0 means that one motor turns off. + + + +// uncomment for testing motor functions. + + + int motor_setup() + { + + //TurnOn(); + + return 0; + } + + + + + + void RunMotor() /// putting it into this mode for some reason makes a bit of a whinning noise (this may simply just be the motor running) + { + + TFC_HBRIDGE_ENABLE; + // TFC_SetMotorPWM(0.4,0.7); + + while(1) + { + if(TFC_ReadPushButton(0)>0) + { + TFC_SetMotorPWM(0.0,0.0); + TFC_HBRIDGE_DISABLE; + DefaultMode(); + + } + } + return; + } + +void DefaultMode() + { + while(1) + { + if(TFC_ReadPushButton(1)>0) + { + RunMotor(); + } + + else if(TFC_ReadPushButton(0)>0) + { + //this will be a debug mode + } + + + } + return; + } + + +void Acc(float& motorA, float& motorB)// set up so as to control both motors during acc. Potential use during corners + { + motorA = motorA + 0.1; + motorB = motorB + 0.1; + TFC_SetMotorPWM(motorA,motorB); + + + return ; + + } + +void Decc(float &motorA, float &motorB) + { + // a good thing to do would be to have a margin for adjustment so that the car cornering can control the acc+dcc much better. + + motorA = motorA - 0.1; + motorB = motorB - 0.1; + + TFC_SetMotorPWM(motorA,motorB); + + return ; + + } + + +void StartLine() + { + TFC_HBRIDGE_ENABLE; + float a=0; + float b=0; + + int x=0 ; + while(x<5) + { + Acc(a,b); + wait(0.5); + x++ ; + } + + return ; + } + +void finishLine(float pwmA) + { + float pwmB= pwmA; + while(pwmA>0) + { + + + Decc(pwmA,pwmB); + + } + return; + } + +void PWM_cornerCntrl(bool a,float pwmRatio) + { + //A is the Right motor B is the left motor. + // may need the value of speed to decelerate. + if(a==1)//turn left + { + cornerLeft(pwmRatio); + } + + else()//turn right + { + cornerRight(pwmRatio) + } + return; + } + + + + +void cornerLeft(float speed) + {// when cornering left the left motor slows down more than the right hand side + // may just replace with ACC and DECC + TFC_SetMotorPWM(speed,speed*cornerPwmControl);//temperary values + + return; + } + +void cornerRight(float speed) + { // may need to put deceleration control within here. + // may just replace with ACC and DECC + TFC_SetMotorPWM(speed*cornerPwmControl,speed); //temperary values + + return; + } + + + +