Skip to content

Commit 91931c2

Browse files
authoredMar 18, 2025
Merge pull request #8 from stack-chan/develop
bug fix and turn function for SCS0009
2 parents 9205ccf + 8623e5c commit 91931c2

File tree

6 files changed

+52
-19
lines changed

6 files changed

+52
-19
lines changed
 

‎library.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
{
2020
"owner": "M5Stack",
2121
"name": "M5Unified",
22-
"version": "^0.2.1"
22+
"version": "^0.2.5"
2323
},
2424
{
2525
"owner": "madhephaestus",
@@ -34,7 +34,7 @@
3434
{
3535
"owner": "bblanchon",
3636
"name": "ArduinoJson",
37-
"version": "^6"
37+
"version": "^7"
3838
},
3939
{
4040
"owner": "robotis-git",
@@ -44,14 +44,14 @@
4444
{
4545
"owner": "tobozo",
4646
"name": "YAMLDuino",
47-
"version": "1.4.2"
47+
"version": "1.5.0"
4848
},
4949
{
5050
"name": "SCServo",
5151
"version": "https://github.com/mongonta0716/SCServo.git"
5252
}
5353
],
54-
"version": "0.0.2",
54+
"version": "0.0.3",
5555
"frameworks": "arduino",
5656
"platforms": "espressif32"
5757
}

‎library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=stackchan-arduino
2-
version=0.0.2
2+
version=0.0.3
33
author=Takao Akaki
44
maintainer=Takao Akaki<takaoakaki@gmail.com>
55
sentence=Stackchan library for M5Stack

‎src/Stackchan_Takao_Base.hpp

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,34 @@ enum PowerStatus {
1111
Battery
1212
};
1313

14-
uint8_t checkTakaoBasePowerStatus(m5::Power_Class* power, StackchanSERVO* servo ) {
15-
bool last_ext_output = power->getExtOutput();
16-
if (power->Axp192.getACINVoltage() > 1.0f) {
14+
PowerStatus checkTakaoBasePowerStatus(m5::Power_Class* power, int16_t battery_threshold = 3200) {
15+
if (!power->getExtOutput() && power->getBatteryCurrent() < 0) {
16+
// TakaoBase使用時(ExtOutput=falseの場合)、バッテリー駆動の時はtrueに切り替える。
17+
// 切り替えないとサーボが動きません。
1718
power->setExtOutput(true);
19+
power->setLed(0);
20+
return PowerStatus::Battery;
21+
}
22+
23+
if (power->getExtOutput() && (power->getBatteryCurrent() >= 0)) {
24+
// M5StackのUSB-C端子から給電されている状態。
1825
power->setLed(80);
19-
return PowerStatus::SidePower;
26+
return PowerStatus::SidePower;
2027
}
21-
while (servo->isMoving()) {delay(1);} // サーボが動いている間は待機(そうしないとサーボの動きが乱れる。)
22-
power->setExtOutput(false); // 後側のUSB-Cの状態を把握するためにfalseにする必要があります。
23-
delay(500);
24-
if (power->Axp192.getBatteryDischargeCurrent() > 3.0f) {
25-
power->setExtOutput(true);
26-
power->setLed(0);
27-
return PowerStatus::Battery;
28+
29+
if (power->getBatteryLevel() < battery_threshold) {
30+
// Batteryの電圧が閾値よりも下がったときの処理
31+
power->setExtOutput(false); // 後側のUSB-Cの給電状態を把握するためにfalseにする必要があります。
32+
if (power->getBatteryCurrent() > 0) {
33+
// 後ろから給電されている状態。
34+
power->setLed(80);
35+
return PowerStatus::BackPower;
36+
} else {
37+
// 給電されていない場合は電源OFF
38+
M5.Power.powerOff();
39+
}
2840
}
29-
power->setExtOutput(false);
30-
power->setLed(80);
31-
return PowerStatus::BackPower;
41+
return PowerStatus::BackPower;
3242
}
3343

3444
#endif // STACKCHAN_TAKAO_BASE_HPP

‎src/Stackchan_servo.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ void StackchanSERVO::attachServos() {
5454
if (_servo_type == ServoType::SCS) {
5555
// SCS0009
5656
Serial2.begin(1000000, SERIAL_8N1, _init_param.servo[AXIS_X].pin, _init_param.servo[AXIS_Y].pin);
57+
delay(500);
5758
_sc.pSerial = &Serial2;
5859
_sc.WritePos(AXIS_X + 1, convertSCS0009Pos(_init_param.servo[AXIS_X].start_degree + _init_param.servo[AXIS_X].offset), 1000);
5960
_sc.WritePos(AXIS_Y + 1, convertSCS0009Pos(_init_param.servo[AXIS_Y].start_degree + _init_param.servo[AXIS_Y].offset), 1000);
@@ -312,6 +313,24 @@ void StackchanSERVO::moveXY(servo_param_s servo_param_x, servo_param_s servo_par
312313
_last_degree_y = servo_param_y.degree;
313314
}
314315

316+
// @uint32_t speed 0〜1000
317+
void StackchanSERVO::turnX(uint32_t speed, bool is_cw, uint32_t millis_for_move) {
318+
if (speed >= 1000) {
319+
speed = 1000;
320+
}
321+
if (is_cw) {
322+
speed += 1000; // 逆回転時は+1000
323+
}
324+
Serial.printf("speed: %d\n", speed);
325+
_sc.PWMMode(1, true); // 回転モード
326+
_isMoving = true;
327+
_sc.WritePWM(1, speed);
328+
vTaskDelay(millis_for_move/portTICK_PERIOD_MS);
329+
_isMoving = false;
330+
_sc.PWMMode(1, false); // 位置決めモードへ戻す
331+
return;
332+
}
333+
315334
void StackchanSERVO::motion(Motion motion_number) {
316335
if (motion_number == nomove) return;
317336
moveXY(90, 75, 500);

‎src/Stackchan_servo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ class StackchanSERVO {
8585
void moveY(servo_param_s servo_param_y);
8686
void moveXY(servo_param_s servo_param_x, servo_param_s servo_param_y);
8787
void motion(Motion motion_no);
88+
void turnX(uint32_t speed, bool is_cw, uint32_t millis_for_move);
8889
bool isMoving() { return _isMoving; }
8990
};
9091
#endif // _STACKCHAN_SERVO_H_

‎src/Stackchan_system_config.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ void StackchanSystemConfig::setDefaultParameters() {
2323
_servo[AXIS_Y].pin = 21;
2424
break;
2525
case m5::board_t::board_M5StackCoreS3:
26+
case m5::board_t::board_M5StackCoreS3SE:
2627
_servo[AXIS_X].pin = 1;
2728
_servo[AXIS_Y].pin = 2;
29+
break;
2830
default:
2931
M5_LOGI("UnknownBoard:%d\n", M5.getBoard());
3032
_servo[AXIS_X].pin = 22;
@@ -190,6 +192,7 @@ void StackchanSystemConfig::setSystemConfig(DynamicJsonDocument doc) {
190192
_servo_type = ServoType::PWM;
191193
}
192194
_secret_config_show = doc["secret_config_show"].as<bool>();
195+
193196
}
194197

195198
void StackchanSystemConfig::setSecretConfig(DynamicJsonDocument doc) {

0 commit comments

Comments
 (0)
Please sign in to comment.