ServoTimer1(サーボモータのドライブ)原文ServoTimer1ライブラリはピン9と10に接続されたサーボをドライブします。このAPIはwiring.orgのサーボライブラリでパターン化されたものですが、コードは異なります。 このライブラリは約450バイトのFlashメモリと、2+(4*サーボ数)バイトのSRAMを消費します。 【インストール方法】 servotimer1.zip http://www.arduino.cc/playground/uploads/ComponentLib/servotimer1.zip 上記のファイルをArduino IDEのライブラリフォルダにコピーします。 【メソッド】 attach(int pinNum) 指定したピンにサーボを割り当てます。戻り値が0の場合は失敗です detach() ピンをサーボから解放します write(int angle) サーボを0度から180度の指定した角度にセットします read() 最後にwrite()でセットした値を取得します attached() サーボが割り当てられているときは1を返します refresh() 無視してください。SoftwareServoライブラリとの互換性のために存在します setMinimumPulseWidth(uint16_t duration) 0度のときのパルス幅をマイクロ秒単位で指定します setMaximumPulseWidth(uint16_t duration) 180度のときのパルス幅をマイクロ秒単位で指定します 【補足】 このライブラリはサーボを完全にハードウェアで制御します。ジッタは1クロック以内に抑えられ、パルスの損失や遅延が生じません。また、実行中の別の処理を邪魔することもありません。 このライブラリはピン9と10でのみ使用でき、そのピンをアナログ出力と兼用することはできません。すべてのサーボに対してdetach()を実行した後ならば、timer1を他の目的に使うことができます。再度attach()を実行すると、timer1はまたサーボのために使われます。 【例】 "90s"や"80w"といった文字列を送ることでサーボを90度あるいは80度にセットします。"d"(detach)でピン10のサーボを無効にし、"a"(attach)で再度有効にすることができます。ServoTimer1::refresh()は必要ありません。 #include <ServoTimer1.h>
ServoTimer1 servo1;
ServoTimer1 servo2;
void setup() {
pinMode(1,OUTPUT);
servo1.attach(9);
servo2.attach(10);
Serial.begin(19200);
Serial.print("Ready");
}
void loop() {
static int v = 0;
if ( Serial.available()) {
char ch = Serial.read();
switch(ch) {
case '0'...'9':
v = v * 10 + ch - '0';
break;
case 's':
servo1.write(v);
v = 0;
break;
case 'w':
servo2.write(v);
v = 0;
break;
case 'd':
servo2.detach();
break;
case 'a':
servo2.attach(10);
break;
}
}
}
[目次へ戻る] |
Creative Commons Attribution-ShareAlike 3.0 License.
このドキュメントはArduino Teamにより執筆され、Takumi Funadaが翻訳し、一部加筆修正したものです
ご意見はtf at musashinodenpa.comまでお送りください
[ドキュメント一覧]