|
|
|
|
@ -88,12 +88,13 @@ bool SF_MoveMotorToZeroPosition(SF_Handle_t instance){ |
|
|
|
|
McuWait_Waitms(20); |
|
|
|
|
numStepsMoved++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
McuULN2003_SetPos(((SF_t*)instance)->motor, 0); |
|
|
|
|
McuULN2003_PowerOff(((SF_t*)instance)->motor); |
|
|
|
|
// success if less than one rotation
|
|
|
|
|
return numStepsMoved < SPLITFLAP_STEPS_ONE_ROUND; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void SF_MoveSteps(SF_Handle_t instance, uint8_t steps){ |
|
|
|
|
void SF_MoveSteps(SF_Handle_t instance, int32_t steps){ |
|
|
|
|
|
|
|
|
|
// run move with acceleration & deceleration
|
|
|
|
|
McuULN2003_AccelerationStart(((SF_t*)instance)->motor); |
|
|
|
|
@ -115,6 +116,23 @@ bool SF_GetMagSensorAtZeroPosition(SF_Handle_t instance){ |
|
|
|
|
return McuGPIO_GetValue(((SF_t*)instance)->magSensor); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void SF_MoveToFlap(SF_Handle_t instance, char* flap){ |
|
|
|
|
// get flap pos from dictonary
|
|
|
|
|
int32_t flapPos = (int32_t)getItem(*splitFlapDict, flap); |
|
|
|
|
// get current motor pos
|
|
|
|
|
int32_t currentPos = McuULN2003_GetPos(((SF_t*)instance)->motor); |
|
|
|
|
// calc steps to move
|
|
|
|
|
int32_t stepsToReachFlap = 0; |
|
|
|
|
if(flapPos == currentPos){ |
|
|
|
|
if(flapPos < currentPos){ |
|
|
|
|
stepsToReachFlap = SPLITFLAP_STEPS_ONE_ROUND-currentPos+flapPos; |
|
|
|
|
}else if(flapPos > currentPos){ |
|
|
|
|
stepsToReachFlap = flapPos - currentPos; |
|
|
|
|
} |
|
|
|
|
SF_MoveSteps(((SF_t*)instance)->motor, stepsToReachFlap); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void SF_Deinit(SF_Handle_t instance){ |
|
|
|
|
McuULN2003_DeinitMotor(((SF_t*)instance)->motor); |
|
|
|
|
|