OP, please clarify: What is your issue?
myservo.write(100); <-- this code on a modified servo will set it to rotate in one direction relatively slowly.
myservo.write(180); <-- this code will set it to rotate in the same direction faster
myservo.write(92); <-- this code will stop the rotation (exact value needs to be tested empirically, but it should be near 90)
Your issue is one of these two (I can't tell which from your posts):
a) Modified Servo starts moving, doesn't stop
Reason: You aren't waiting for half an hour, which is how long the first delay is in code. It won't stop until you tell it to with myservo.write(92)
b) Modified Servo doesn't start moving
Reason: You have power supply issues, or your modified servo is broken.
General statements: You NO LONGER have ANY position feedback on your servo, unless you get around to ADDING an encoder or infinite-turn potentiometer to the output shaft. The ONLY WAY to control position in your case is to guesstimate the amount of time it takes to travel theta degrees at a set speed, then wait that long and hope the servo's in the right place.
electricBunny:
Using the servo library alone I now know that it is impossible to stop the motor once the command to move it is given.
This is false. Where did you get that from? Setting the desired 'angle' back to wherever the servo's internal potentiometer is glued will stop the motor.
electricBunny:
However is there a library for timing events which can be used for this purpose. Pseudocode example below:
#the time is defined as the time since the program started to run, the unit is hours
if (12.00<time <13.00)
{
write servo(500);
}
else
{
stop the once-a-servo and return to the beginning of the scope
}
This is going to tell the servo to move at maximum speed (500 is more than the servo's write command will take) in one direction, for an hour. I'm not sure what you're trying to get at here - running it in one direction for x hours is not going to give you position control.
On a modified servo, the |setAngle - centerPoint| is approximately proportional to the speed that the motor will move at. If setAngle < centerPoint, it will turn one way, and if setAngle > centerPoint, it will turn the other. If setAngle == centerPoint, it will stop. It WILL try to write the position indefinitely - but since it can't actually get there, it will simply keep rotating.
There isn't a point to make another library for these modified servos - the commands are the same and the signals are the same. The only difference is what the output of the servo will be.