mirror of
https://github.com/esphome/esphome.git
synced 2024-12-26 07:24:54 +01:00
Add stepper.set_acceleration and stepper.set_deceleration to stepper component (#1977)
This commit is contained in:
parent
ab31117bf3
commit
79b9d0579d
2 changed files with 69 additions and 1 deletions
|
@ -21,6 +21,8 @@ Stepper = stepper_ns.class_("Stepper")
|
|||
SetTargetAction = stepper_ns.class_("SetTargetAction", automation.Action)
|
||||
ReportPositionAction = stepper_ns.class_("ReportPositionAction", automation.Action)
|
||||
SetSpeedAction = stepper_ns.class_("SetSpeedAction", automation.Action)
|
||||
SetAccelerationAction = stepper_ns.class_("SetAccelerationAction", automation.Action)
|
||||
SetDecelerationAction = stepper_ns.class_("SetDecelerationAction", automation.Action)
|
||||
|
||||
|
||||
def validate_acceleration(value):
|
||||
|
@ -138,11 +140,47 @@ async def stepper_report_position_to_code(config, action_id, template_arg, args)
|
|||
async def stepper_set_speed_to_code(config, action_id, template_arg, args):
|
||||
paren = await cg.get_variable(config[CONF_ID])
|
||||
var = cg.new_Pvariable(action_id, template_arg, paren)
|
||||
template_ = await cg.templatable(config[CONF_SPEED], args, cg.int32)
|
||||
template_ = await cg.templatable(config[CONF_SPEED], args, cg.float_)
|
||||
cg.add(var.set_speed(template_))
|
||||
return var
|
||||
|
||||
|
||||
@automation.register_action(
|
||||
"stepper.set_acceleration",
|
||||
SetAccelerationAction,
|
||||
cv.Schema(
|
||||
{
|
||||
cv.Required(CONF_ID): cv.use_id(Stepper),
|
||||
cv.Required(CONF_ACCELERATION): cv.templatable(validate_acceleration),
|
||||
}
|
||||
),
|
||||
)
|
||||
async def stepper_set_acceleration_to_code(config, action_id, template_arg, args):
|
||||
paren = await cg.get_variable(config[CONF_ID])
|
||||
var = cg.new_Pvariable(action_id, template_arg, paren)
|
||||
template_ = await cg.templatable(config[CONF_ACCELERATION], args, cg.float_)
|
||||
cg.add(var.set_acceleration(template_))
|
||||
return var
|
||||
|
||||
|
||||
@automation.register_action(
|
||||
"stepper.set_deceleration",
|
||||
SetDecelerationAction,
|
||||
cv.Schema(
|
||||
{
|
||||
cv.Required(CONF_ID): cv.use_id(Stepper),
|
||||
cv.Required(CONF_DECELERATION): cv.templatable(validate_acceleration),
|
||||
}
|
||||
),
|
||||
)
|
||||
async def stepper_set_deceleration_to_code(config, action_id, template_arg, args):
|
||||
paren = await cg.get_variable(config[CONF_ID])
|
||||
var = cg.new_Pvariable(action_id, template_arg, paren)
|
||||
template_ = await cg.templatable(config[CONF_DECELERATION], args, cg.float_)
|
||||
cg.add(var.set_deceleration(template_))
|
||||
return var
|
||||
|
||||
|
||||
@coroutine_with_priority(100.0)
|
||||
async def to_code(config):
|
||||
cg.add_global(stepper_ns.using)
|
||||
|
|
|
@ -77,5 +77,35 @@ template<typename... Ts> class SetSpeedAction : public Action<Ts...> {
|
|||
Stepper *parent_;
|
||||
};
|
||||
|
||||
template<typename... Ts> class SetAccelerationAction : public Action<Ts...> {
|
||||
public:
|
||||
explicit SetAccelerationAction(Stepper *parent) : parent_(parent) {}
|
||||
|
||||
TEMPLATABLE_VALUE(float, acceleration);
|
||||
|
||||
void play(Ts... x) override {
|
||||
float acceleration = this->acceleration_.value(x...);
|
||||
this->parent_->set_acceleration(acceleration);
|
||||
}
|
||||
|
||||
protected:
|
||||
Stepper *parent_;
|
||||
};
|
||||
|
||||
template<typename... Ts> class SetDecelerationAction : public Action<Ts...> {
|
||||
public:
|
||||
explicit SetDecelerationAction(Stepper *parent) : parent_(parent) {}
|
||||
|
||||
TEMPLATABLE_VALUE(float, deceleration);
|
||||
|
||||
void play(Ts... x) override {
|
||||
float deceleration = this->deceleration_.value(x...);
|
||||
this->parent_->set_deceleration(deceleration);
|
||||
}
|
||||
|
||||
protected:
|
||||
Stepper *parent_;
|
||||
};
|
||||
|
||||
} // namespace stepper
|
||||
} // namespace esphome
|
||||
|
|
Loading…
Reference in a new issue