Fix not all servos in tree moving
This commit is contained in:
parent
8672e1519a
commit
4776907262
@ -42,9 +42,15 @@ void ServoMotor::SetTargetVelocity(float targetVelocity) {
|
|||||||
|
|
||||||
float ServoMotor::GetTargetVelocity() { return this->targetVelocity; }
|
float ServoMotor::GetTargetVelocity() { return this->targetVelocity; }
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
|
|
||||||
void ServoMotor::Update(float currentTimeMs) {
|
void ServoMotor::Update(float currentTimeMs) {
|
||||||
|
for (unsigned char childIx = 0; childIx < this->childCount; childIx++) {
|
||||||
|
Thing *child = this->GetChild(childIx);
|
||||||
|
if (child != nullptr && child->type == Thing::ServoType) {
|
||||||
|
ServoMotor *servo = (ServoMotor *)child;
|
||||||
|
servo->Update(currentTimeMs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (this->lastUpdateTimeMs == 0 || currentTimeMs < this->lastUpdateTimeMs) {
|
if (this->lastUpdateTimeMs == 0 || currentTimeMs < this->lastUpdateTimeMs) {
|
||||||
this->lastUpdateTimeMs = currentTimeMs;
|
this->lastUpdateTimeMs = currentTimeMs;
|
||||||
return;
|
return;
|
||||||
@ -52,6 +58,7 @@ void ServoMotor::Update(float currentTimeMs) {
|
|||||||
|
|
||||||
float deltaTime = (currentTimeMs - this->lastUpdateTimeMs) / 1000.0F;
|
float deltaTime = (currentTimeMs - this->lastUpdateTimeMs) / 1000.0F;
|
||||||
|
|
||||||
|
// Position control
|
||||||
if (controlMode == ControlMode::Position) {
|
if (controlMode == ControlMode::Position) {
|
||||||
if (maxVelocity == 0.0F || hasTargetAngle == false) {
|
if (maxVelocity == 0.0F || hasTargetAngle == false) {
|
||||||
this->lastUpdateTimeMs = currentTimeMs;
|
this->lastUpdateTimeMs = currentTimeMs;
|
||||||
@ -77,7 +84,8 @@ void ServoMotor::Update(float currentTimeMs) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else { // Velocity Control
|
// Velocity control
|
||||||
|
} else {
|
||||||
float newAngle = this->targetAngle + targetVelocity * deltaTime;
|
float newAngle = this->targetAngle + targetVelocity * deltaTime;
|
||||||
newAngle = Float::Clamp(newAngle, minAngle, maxAngle);
|
newAngle = Float::Clamp(newAngle, minAngle, maxAngle);
|
||||||
|
|
||||||
@ -86,13 +94,4 @@ void ServoMotor::Update(float currentTimeMs) {
|
|||||||
|
|
||||||
this->lastUpdateTimeMs = currentTimeMs;
|
this->lastUpdateTimeMs = currentTimeMs;
|
||||||
}
|
}
|
||||||
|
|
||||||
Serial.println(this->childCount);
|
|
||||||
for (unsigned char childIx = 0; childIx < this->childCount; childIx++) {
|
|
||||||
Thing *child = this->GetChild(childIx);
|
|
||||||
if (child->type == Thing::ServoType) {
|
|
||||||
ServoMotor *servo = (ServoMotor *)child;
|
|
||||||
servo->Update(currentTimeMs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1 +1 @@
|
|||||||
Subproject commit 78106912a9e80c1ace5533615cab0bd4a00657a0
|
Subproject commit 596e85d3a41f5f25b6185f2ca4fb18a2140afca1
|
Loading…
x
Reference in New Issue
Block a user