mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	Add stepper.set_acceleration and stepper.set_deceleration to stepper component (#1977)
This commit is contained in:
		| @@ -21,6 +21,8 @@ Stepper = stepper_ns.class_("Stepper") | |||||||
| SetTargetAction = stepper_ns.class_("SetTargetAction", automation.Action) | SetTargetAction = stepper_ns.class_("SetTargetAction", automation.Action) | ||||||
| ReportPositionAction = stepper_ns.class_("ReportPositionAction", automation.Action) | ReportPositionAction = stepper_ns.class_("ReportPositionAction", automation.Action) | ||||||
| SetSpeedAction = stepper_ns.class_("SetSpeedAction", 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): | 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): | async def stepper_set_speed_to_code(config, action_id, template_arg, args): | ||||||
|     paren = await cg.get_variable(config[CONF_ID]) |     paren = await cg.get_variable(config[CONF_ID]) | ||||||
|     var = cg.new_Pvariable(action_id, template_arg, paren) |     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_)) |     cg.add(var.set_speed(template_)) | ||||||
|     return var |     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) | @coroutine_with_priority(100.0) | ||||||
| async def to_code(config): | async def to_code(config): | ||||||
|     cg.add_global(stepper_ns.using) |     cg.add_global(stepper_ns.using) | ||||||
|   | |||||||
| @@ -77,5 +77,35 @@ template<typename... Ts> class SetSpeedAction : public Action<Ts...> { | |||||||
|   Stepper *parent_; |   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 stepper | ||||||
| }  // namespace esphome | }  // namespace esphome | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user