ramp_ctrl.c 945 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "ramp_ctrl.h"
  2. #define RAMP_INTVAL 5 //ms
  3. static void ramp_timer_handler(timer_t *timer);
  4. void ramp_ctrl_init(ramp_t *ramp, float start, float final, u32 duration_ms){
  5. ramp->target = start;
  6. ramp->final_point = final;
  7. ramp->duration_ms = duration_ms;
  8. ramp->steps = (final - start) / (duration_ms / RAMP_INTVAL);
  9. if (ramp->timer.handler != NULL) {
  10. timer_cancel(&ramp->timer);
  11. }
  12. ramp->timer.handler = NULL;
  13. }
  14. void ramp_exc(ramp_t *ramp){
  15. if (ramp->timer.handler == NULL) {
  16. ramp->timer.handler = ramp_timer_handler;
  17. timer_post(&ramp->timer, RAMP_INTVAL);
  18. }
  19. }
  20. float ramp_get_target(ramp_t *ramp){
  21. return ramp->target;
  22. }
  23. static void ramp_timer_handler(timer_t *timer) {
  24. ramp_t *ramp = (ramp_t *)timer;
  25. float target = ramp->target + ramp->steps;
  26. if (target > ramp->final_point) {
  27. target = ramp->final_point;
  28. }
  29. ramp->target = target;
  30. if (target != ramp->final_point) {
  31. timer_post(&ramp->timer, RAMP_INTVAL);
  32. }
  33. }