I recently found that standard servos only rotate 90deg total rotation for a pulse width range of 1-2 usec. To rotate 180deg total rotation they need a .5-2.5 usec pulse range. The arduino is programmed to only output the 1-2 usec range for 0-180 deg rotation. Is there a way to make the arduino output the .5-2.5 usec pulse range to get full 180deg rotation?


1 Answer 1


The Servo Attach method has two forms,

servo.attach(pin, min, max)

In the latter form, you can specify values for the min and max microseconds that servo.write() will use to represent 0° and 180° respectively.

Note, default values are 544 μs and 2400 μs, which is not so different than the range you say you want, so perhaps some other problem is afflicting your setup.

Also, as explained in my answer to question “Change Servo Speed With RedBearLabs BLE Shield”, you can issue servo.write(value) calls with value in microseconds instead of in degrees, which may allow more precise control.

  • Thanks for responding to my post. I thought I read somewhere that the Arduino outputs only the 1000usec to 2000usec pulse range, but I see from testing it that the standard range is as you say it is. When you go to buy a servo, most that I've found say they only turn 90 deg, but can turn 180 deg. if you supply the greater pulse range of 500 usec to 2500 usec. Hitec has a "180 deg. rotation" option that costs $10 but I think its not needed, the Arduino already can output the extended pulse range. Hitec shows that standard RC servo controllers only output the smaller pulse range. Commented Mar 28, 2016 at 4:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.