ICS(シリアルサーボ)

西村備山さんのICSライブラリをGR-ROSE用にポーティングしたライブラリです。近藤科学のKRSシリーズのシリアルサーボの制御が簡単に行えます。API仕様についてはGitHubのREADMEを参照してください。

使用する場合は、#include <ICS.h>を記述してください。サンプルプログラムのみ記載します。


サンプルプログラム

Serial1に接続されたID0とID1のサーボを回しつつ、位置を取得するサンプルです。同期制御です。


#include <Arduino.h>
#include <ICS.h>

IcsController ICS(Serial1);
IcsServo servo1;
IcsServo servo2;
 
void setup() {
 
  Serial.begin(115200);
 
  ICS.begin();
  servo1.attach(ICS, 0x00);
  servo2.attach(ICS, 0x01);
 
  servo1.setPosition(7500-4000);
  servo2.setPosition(7500+4000);
 
  delay(1000);
}
 
void loop() {
 
  for(int position=-4000; position<=4000; position+=100){
 
    Serial.print(position); Serial.print("\t");
    Serial.print(servo1.setPosition(7500+position)); Serial.print("\t");
    Serial.print(servo2.setPosition(7500-position)); Serial.print("\n");
 
    delay(20);
  }
  for(int position=-4000; position<=4000; position+=100){
 
    Serial.print(position); Serial.print("\t");
    Serial.print(servo1.setPosition(7500-position)); Serial.print("\t");
    Serial.print(servo2.setPosition(7500+position)); Serial.print("\n");
 
    delay(20);
  }
}

Serial1に接続されたID0とID1のサーボを回しつつ、位置を取得するサンプルです。こちらは非同期制御です。


#include <Arduino.h>
#include <ICS.h>

IcsController ICS(Serial1);
IcsServo servo1;
IcsServo servo2;
 
void setup() {
 
  Serial.begin(115200);
 
  ICS.begin();
  servo1.attach(ICS, 0x00);
  servo2.attach(ICS, 0x01);
 
  servo1.setPosition(7500-4000);
  servo2.setPosition(7500+4000);
 
  delay(1000);
}
 
void loop() {
 
  for(int position=-4000; position<=4000; position+=100){
    servo1.requestPosition(7500+position);
    servo2.requestPosition(7500-position);
 
    while(!ICS.isReady())
    {
        ICS.loop();
        ; // Do any other process while communicating!
    }
 
    Serial.print(position); Serial.print("\t");
    Serial.print(servo1.position); Serial.print("\t");
    Serial.print(servo2.position); Serial.print("\n");
 
    delay(20);
  }
  for(int position=-4000; position<=4000; position+=100){
    servo1.requestPosition(7500-position);
    servo2.requestPosition(7500+position);
 
    while(!ICS.isReady())
    {
        ICS.loop();
        ; // Do any other process while communicating!
    }
 
    Serial.print(position); Serial.print("\t");
    Serial.print(servo1.position); Serial.print("\t");
    Serial.print(servo2.position); Serial.print("\n");
 
    delay(20);
  }
}