対処療法として、writeMicroseconds()して動作完了したらdetach()することで、振動を抑える(そもそもPWMを切ってしまう)ことにした。
均衡点付近で永久に振動していることを考えると、スライディングモード制御などが使えるんだろうか。
#include <Servo.h> Servo s; int angle; void setup(){ angle = 0; } void loop(){ s.attach(9); //接続(PWMは出力しない) if(Serial.available()>0){ int c = Serial.read(); if (c=='a'){ angle += 0; int us = map(angle,0,180,800,2200); Servo.writeMicroseconds(us); //ここでPWMを生成 delay(1000); //動作が完了するまで時間を指定(ここでは1秒を決め打ち) } s.detach(); //PWM出力解除 //本当はコマンドが正しかったらという //バリデーションを付けた方がいいと思われる } }