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までお送りください [Arduino wiki]