18: 2018-11-28 (Wed) 16:08:21 takaboo source Cur: 2018-12-02 (Sun) 21:33:36 takaboo source
Line 237: Line 237:
   // put your setup code here, to run once:    // put your setup code here, to run once:
 }  }
 + 
 void loop() {  void loop() {
   // put your main code here, to run repeatedly:    // put your main code here, to run repeatedly:
Line 266: Line 266:
****Dynamixel Library for Arduino [#t98a44bc] ****Dynamixel Library for Arduino [#t98a44bc]
-DXSHIELDを[[ソフトウェアシリアル>#ee08b548]]もしくは[[ハードウェアシリアル>#ce79cebb]]モードに設定した場合、ArduinoのスケッチでDynamixelを制御するためのライブラリが利用できます。~ +#include(DXLIB_Arduino,notitle)
-PC版DYNAMIXEL Protocol [[1.0>Dynamixel Library]]/[[2.0>Dynamixel Protocol 2 Library]] Library同様プロトコルやにシリアル通信を意識すること無くコントロールテーブルへの読み書きが行えますが、Arduino版は機能を限定したサブセット版となります。 +
- +
--ライブラリのダウンロード(Arduino UNO/MEGAを想定)~ +
--- +
-#ref(dxlib1.3_for_arduino.zip) +
-dxlib.cppのハードウェアシリアルポートの初期化不足修正 +
- +
--- +
-#ref(dxlib1.2_for_arduino.zip) +
-任意のハードウェアシリアルポートへの割り当て対応 +
- +
--- +
-#ref(dxlib1.1_for_arduino.zip) +
-Dynamixel Protocol V.2に対応~ +
-低位の送受信関数追加~ +
-32bitデータの送受信関数追加~ +
-アドレスとサイズに関する引数は全て16bitに統一 +
- +
--- +
-#ref(dxlib1.0_for_arduino.zip) +
-初期リリース +
- +
-DXLIBのインストールは、ArduinoのIDEの「スケッチ→ライブラリのインクルード→.ZIP形式のライブラリをインストール...」メニューを使用してダウンロードしたZIPファイルを選択するだけです。~ +
-インストールが完了すると、ユーザーフォルダ配下に「Arduino/libraries/dxlib」が作られ、ライブラリのソースといくつかのサンプルプログラムがその中に展開されます。詳しくはサンプルプログラムとライブラリのソースを参照して下さい。~ +
- +
-DXLIB v1.2で使用できるヘッダファイルとAPIは以下の通りです。 +
--&color(#0099ff){''dxlib.h''};~ +
-[[DYNAMIXEL Communiation Protocol 1.0]]対応デバイスを対象とする場合、'''dxlib.h'''をスケッチにインクルードする事で'''DXLIB'''クラスが利用できるようになります。なお、Arduinoのリソースの都合から、'''dx2lib.h'''との共存はできません。 +
- #include <dxlib.h> +
- DXLIB dxif (true); // select software serial +
- void setup() { +
-   dxif.begin (57600); +
- } +
--&color(#0099ff){''dx2lib.h''};~ +
-[[DYNAMIXEL Communiation Protocol 2.0]]対応デバイスを対象とする場合、'''dx2lib.h'''をスケッチにインクルードする事で'''DX2LIB'''クラスが利用できるようになります。なお、Arduinoのリソースの都合から、'''dxlib.h'''との共存はできません。 +
- #include <dx2lib.h> +
- DX2LIB dxif (true); // select software serial +
- void setup() { +
-   dxif.begin (57600); +
- } +
--&color(#0099ff){''DXLIB/DX2LIB'' (bool ss, HardwareSerial *hws, uint8_t rxpin, uint8_t txpin)};~ +
-ヘッダファイルに応じて'''DXLIB'''ないし'''DX2LIB'''いずれかのクラスが使用できます。同時にソフトウェアシリアルの使用('''ss''')・ハードウェアシリアルオブジェクト('''hws''')・受信端子('''rxpin''')・送信端子('''txpin''')を指定した上でオブジェクトを生成できます。~ +
-なお、'''ss'''にtrueを指定したら[[ソフトウェアシリアルモード>#ee08b548]]、falseを指定したら[[ハードウェアシリアルモード>#ce79cebb]]にDXSHIELDを設定しなくてはなりません。~ +
-また、'''hws'''や'''rxpin'''、'''txpin'''は通常指定する必要はありませんが、他のSHIELDやArduinoの機能の都合で使用できない場合に限り指定します。 +
- #include <dx2lib.h> +
- // dxifの名前でDynamixel Protocol V.2 Libraryをインスタンス化 +
- // ソフトウェアシリアルモードで使用 +
- DX2LIB dxif(true); +
--&color(#0099ff){void DXLIB/DX2LIB::''begin'' (long baud)};~ +
-ライブラリを使用可能にします。引数('''baud''')にはDynamixelに設定されたボーレートを指定します。~ +
-なお、選択したモードにより使用できるボーレートに制限があります。 +
- // 生成されたdxifを57143bpsで初期化 +
- void setup() { +
-   dxif.begin (57143); +
- } +
--&color(#0099ff){bool DXLIB/DX2LIB::''TxPacket'' (uint8_t id, uint8_t inst, uint8_t *param, uint16_t len)};~ +
-指定されたID('''id''')・インストラクション('''inst''')・パラメータ('''param''')・パラメータ長('''len''')のインストラクションパケットを送信します。 +
- // ID=1へPingインストラクションパケットを送信 +
- dxif.TxPacket (1, 0x01, NULL, 0); +
--&color(#0099ff){bool DXLIB/DX2LIB::''RxPacket'' (uint8_t *rdata, uint16_t rdatasize, uint8_t *rid, uint16_t *rlen, uint8_t *err)};~ +
-ステータスパケットを受信します。成功するとパケット内のパラメータが'''rdata'''へコピーされ、そのパラメータのサイズが'''rlen'''に返されます。なお、ステータスパケットを受信するのに十分なサイズを確保し、そのポインタを'''rdata'''へ、サイズを'''rdatasize'''に指定します。'''rid'''にはID、'''err'''にはDynamixelのエラーが返ります。 +
- uint8_t buf[10], id, err; +
- uint16_t len; +
- // ID=1へPingインストラクションパケットを送信 +
- dxif.TxPacket (1, 0x01, NULL, 0); +
- // ステータスパケットを受信 +
- dxif.RxPacket (buf, sizeof (buf), &id, &len, &err) +
--&color(#0099ff){bool DXLIB/DX2LIB::''ReadByteData'' (uint8_t id, uint16_t addr, uint8_t *data, uint8_t *err)};~ +
-指定されたID('''id''')・アドレス('''addr''')から8ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。 +
- // ID=1のAX-12のLEDを取得 +
- uint8_t led; +
- dxif.ReadByteData (1, 25, &led, NULL); +
--&color(#0099ff){bool DXLIB/DX2LIB::''ReadWordData'' (uint8_t id, uint16_t addr, uint16_t *data, uint8_t *err)};~ +
-指定されたID('''id''')・アドレス('''addr''')から16ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。 +
- // ID=1のAX-12からPresentPositionを取得 +
- uint16_t ppos; +
- dxif.ReadWordData (id, 36, &ppos, NULL); +
--&color(#0099ff){bool DXLIB/DX2LIB::''ReadLongData'' (uint8_t id, uint16_t addr, uint32_t *data, uint8_t *err)};~ +
-指定されたID('''id''')・アドレス('''addr''')から32ビットのデータを'''data'''へ読み出します。'''err'''にはDynamixelのエラーが返ります。 +
--&color(#0099ff){bool DXLIB/DX2LIB::''WriteByteData'' (uint8_t id, uint16_t addr, uint8_t data, uint8_t *err)};~ +
-指定されたID('''id''')・アドレス('''addr''')・8ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 +
- // ID=1のAX-12のLEDを点灯 +
- uint8_t err; +
- dxif.WriteByteData (id, 25, 1, &err); +
--&color(#0099ff){bool DXLIB/DX2LIB::''WriteWordData'' (uint8_t id, uint16_t addr, uint16_t data, uint8_t *err)};~ +
-指定されたID('''id''')・アドレス('''addr''')・16ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 +
- // ID=1のAX-12のGoalPositionを511に変更 +
- dxif.WriteWordData (id, 30, 511, NULL); +
--&color(#0099ff){bool DXLIB/DX2LIB::''WriteLongData'' (uint8_t id, uint16_t addr, uint32_t data, uint8_t *err)};~ +
-指定されたID('''id''')・アドレス('''addr''')・32ビットのデータ('''data''')をDynamixelに書き込みます。'''err'''にはDynamixelのエラーが返ります。 +
--&color(#0099ff){bool DXLIB/DX2LIB::''WriteSyncByteData'' (const uint8_t *pid, uint16_t addr, const uint8_t *pdata, int num)};~ +
-指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・8ビットのデータ配列('''pdata''')をDynamixelに書き込みます。 +
- // ID=1~5の5個のAX-12のLEDへ点滅を指令 +
- uint8_t ids={1,2,3,4,5}; +
- uint16_t leds={1,1,1,1,1}; +
- dxif.WriteSyncByteData (ids, 30, leds, 5); +
--&color(#0099ff){bool DXLIB/DX2LIB::''WriteSyncWordData'' (const uint8_t *pid, uint16_t addr, const uint16_t *pdata, int num)};~ +
-指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・16ビットのデータ配列('''pdata''')をDynamixelに書き込みます。 +
- // ID=1~5の5個のAX-12に個別のGoalPositionを指令 +
- uint8_t ids={1,2,3,4,5}; +
- uint16_t poss={100,200,300,400,500}; +
- dxif.WriteSyncWordData (ids, 30, ppos, 5); +
--&color(#0099ff){bool DXLIB/DX2LIB::''WriteSyncLongData'' (const uint8_t *pid, uint16_t addr, const uint32_t *pdata, int num)};~ +
-指定されたid数('''num''')分のIDの配列('''pid''')・アドレス('''addr''')・32ビットのデータ配列('''pdata''')をDynamixelに書き込みます。 +
--&color(#0099ff){bool DXLIB/DX2LIB::''Ping'' (uint8_t id, uint16_t *err)};~ +
-指定されたID('''id''')のDynamixelを検索します。'''err'''にはDynamixelのエラーが返ります。 +
--&color(#0099ff){bool DXLIB/DX2LIB::''Reset'' (uint8_t id, uint16_t *err)};~ +
-指定されたID('''id''')のDynamixelを出荷時状態に戻します。'''err'''にはDynamixelのエラーが返ります。 +
- +
-また、Arduino IDEのバージョンによっては「SoftwareSerial.h: No such file or directory」のコンパイルエラーが発生しますので、その場合は自信のスケッチの先頭に以下の1行を挿入してコンパイルします。 +
- #include <SoftwareSerial.h>+
**その他 [#w7e62a68] **その他 [#w7e62a68]
Line 400: Line 289:
-ジャンパ先のSerial??に合わせてクラスの初期化を変更(DXLIB v1.2以降でサポート)。 -ジャンパ先のSerial??に合わせてクラスの初期化を変更(DXLIB v1.2以降でサポート)。
 DXLIB dxif (false, &Serial3);  DXLIB dxif (false, &Serial3);
 + 
 DX2LIB dxif (false, &Serial3);  DX2LIB dxif (false, &Serial3);
-IO8・IO9は使用不可 -IO8・IO9は使用不可
Line 412: Line 301:
-入れ替えた端子に合わせてクラスの初期化を変更。~ -入れ替えた端子に合わせてクラスの初期化を変更。~
 DXLIB dxif (true, NULL, 10, 9); // rxpin IO8->IO10, txpin IO9  DXLIB dxif (true, NULL, 10, 9); // rxpin IO8->IO10, txpin IO9
 + 
 DX2LIB dxif (true, NULL, 10, 9); // rxpin IO8->IO10, txpin IO9  DX2LIB dxif (true, NULL, 10, 9); // rxpin IO8->IO10, txpin IO9
-IO8・IO9・IO10は使用不可 -IO8・IO9・IO10は使用不可


Front page   Diff ReloadPrint View   Page list Search Recent changes   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)