Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 135 additions & 0 deletions docs/api.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# Stackchan Arduino Library API ドキュメント

## 概要
Stackchan Arduino Library は、M5Stack デバイス上で Stack-chan を制御するためのライブラリです。このライブラリは、サーボモーターの制御、設定ファイルの読み込み、Bluetooth 設定などの機能を提供します。

---

## クラス一覧

### 1. `StackchanSystemConfig`
設定ファイルを読み込み、システム設定を管理するクラス。

#### メソッド
- **`loadConfig(fs::FS& fs, const char *app_yaml_filename, uint32_t app_yaml_filesize, const char* secret_yaml_filename, uint32_t secret_yaml_filesize, const char* basic_yaml_filename, uint32_t basic_yaml_filesize)`**
- 設定ファイルを読み込み、システム設定を初期化します。
- 引数:
- `fs`: ファイルシステムオブジェクト。
- `app_yaml_filename`: アプリケーション設定ファイルのパス。
- `app_yaml_filesize`: アプリケーション設定ファイルのサイズ。
- `secret_yaml_filename`: 個人情報設定ファイルのパス。
- `secret_yaml_filesize`: 個人情報設定ファイルのサイズ。
- `basic_yaml_filename`: 基本設定ファイルのパス。
- `basic_yaml_filesize`: 基本設定ファイルのサイズ。

- **`printAllParameters()`**
- 全ての設定パラメータをログに出力します。

- **`getServoInfo(uint8_t servo_axis_no)`**
- 指定したサーボ軸の情報を取得します。

- **`getWiFiSetting()`**
- WiFi 設定を取得します。

- **`getAPISetting()`**
- API キー設定を取得します。

---

### 2. `StackchanSERVO`
サーボモーターを制御するクラス。

#### メソッド
- **`begin(stackchan_servo_initial_param_s init_params)`**
- サーボモーターを初期化します。

- **`moveX(int x, uint32_t millis_for_move = 0)`**
- X 軸のサーボを指定した角度に移動します。
- 引数:
- `x`: 移動する角度。
- `millis_for_move`: 移動にかける時間(ミリ秒)。

- **`moveY(int y, uint32_t millis_for_move = 0)`**
- Y 軸のサーボを指定した角度に移動します。

- **`moveXY(int x, int y, uint32_t millis_for_move)`**
- X 軸と Y 軸のサーボを同時に移動します。

- **`motion(Motion motion_no)`**
- プリセットされたモーションを実行します。
- 引数:
- `motion_no`: 実行するモーションの種類(例: `greet`, `laugh`)。

---

### 3. `StackchanExConfig`
`StackchanSystemConfig` を拡張したクラスで、アプリケーション固有の設定を管理します。

#### メソッド
- **`loadExtendConfig(fs::FS& fs, const char *yaml_filename, uint32_t yaml_size)`**
- 拡張設定ファイルを読み込みます。

- **`setExtendSettings(DynamicJsonDocument doc)`**
- 拡張設定を適用します。

- **`printExtParameters()`**
- 拡張設定のパラメータをログに出力します。

---

## 列挙型

### `Motion`
サーボモーターのプリセットモーションを定義します。
- `nomove`: 動かない。
- `greet`: 挨拶。
- `laugh`: 笑う。
- `nod`: うなずく。
- `refuse`: 拒否する。
- `test`: テスト用。

### `ServoType`
サーボモーターの種類を定義します。
- `PWM`: PWM サーボ (例: SG90)。
- `SCS`: シリアルサーボ (例: Feetech SCS0009)。
- `DYN_XL330`: Dynamixel XL330。
- `RT_DYN_XL330`: RT バージョンの Dynamixel XL330。

---

## 設定ファイル

### SC_BasicConfig.yaml
基本設定ファイル。サーボのピン番号、初期位置、可動範囲、速度などを定義します。

### SC_SecConfig.yaml
個人情報設定ファイル。WiFi の SSID やパスワード、API キーを定義します。

### SC_ExtConfig.yaml
拡張設定ファイル。アプリケーション固有の設定を記述します。

---

## 使用例

### サーボの初期化と移動
```cpp
#include <M5Unified.h>
#include "Stackchan_servo.h"

StackchanSERVO servo;

void setup() {
M5.begin();
servo.begin(33, 90, 0, 32, 90, 0, ServoType::PWM); // サーボの初期化
servo.moveX(45, 1000); // X軸を45度に移動(1秒かけて)
servo.moveY(60, 1000); // Y軸を60度に移動(1秒かけて)
servo.moveXY(90, 90, 1000); // 正面を向く(1秒かけて)
}

void loop() {
// 繰り返し処理
}
```

---
2 changes: 1 addition & 1 deletion library.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
"version": "https://github.com/mongonta0716/SCServo.git"
}
],
"version": "0.0.3",
"version": "0.0.4",
"frameworks": "arduino",
"platforms": "espressif32"
}
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=stackchan-arduino
version=0.0.3
version=0.0.4
author=Takao Akaki
maintainer=Takao Akaki<takaoakaki@gmail.com>
sentence=Stackchan library for M5Stack
Expand Down
2 changes: 1 addition & 1 deletion src/Stackchan_servo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ void StackchanSERVO::moveXY(int x, int y, uint32_t millis_for_move) {
int y_pos = _last_degree_y + increase_degree_y * quadraticEaseInOut(f);
_sc.WritePos(AXIS_X + 1, convertSCS0009Pos(x_pos + _init_param.servo[AXIS_X].offset), division_time);
_sc.WritePos(AXIS_Y + 1, convertSCS0009Pos(y_pos + _init_param.servo[AXIS_Y].offset), division_time);
//vTaskDelay(division_time);
vTaskDelay(division_time);
}
_isMoving = false;
} else if (_servo_type == ServoType::DYN_XL330) {
Expand Down