基本ライブラリ
デジタルIO
アナログIO
拡張IO
時間
数学
三角関数
乱数
ビットバイト操作
割り込み
シリアル通信
標準ライブラリ
Ethernet
サーボモーター
ステッピングモーター
キャラクタ液晶表示
SPI通信
I2C通信(Wire)
SD
SD(File操作)
周期処理(MsTimer2)
時計(RTC)
PPG(パルス生成)
WiFiEsp
ICS(シリアルサーボ)
FreeRTOS Tips
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);
}
}