| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #include "ramp_ctrl.h"
- #define RAMP_INTVAL 50 //ms
- void ramp_timer_handler(shark_timer_t *timer);
- void ramp_ctrl_init(ramp_t *ramp){
- ramp_clear(ramp);
- ramp->timer.handler = ramp_timer_handler;
- }
- void ramp_clear(ramp_t *ramp) {
- shark_timer_cancel(&ramp->timer);
- ramp->start_point = 0;
- ramp->target = 0;
- ramp->final_point = 0;
- ramp->duration_ms = 0;
- ramp->steps = 0;
- }
- void ramp_set_target(ramp_t *ramp, float start, float final, u32 duration_ms) {
- shark_timer_cancel(&ramp->timer);
- ramp->start_point = start;
- ramp->final_point = final;
- ramp->duration_ms = duration_ms;
-
- if (duration_ms == 0) {
- ramp->steps = (final - ramp->start_point);
- ramp->target = final;
- }else {
- ramp->steps = (final - ramp->start_point) / (duration_ms / RAMP_INTVAL);
- ramp_exc(ramp);
- }
- }
- void ramp_exc(ramp_t *ramp){
- shark_timer_post(&ramp->timer, RAMP_INTVAL);
- }
- float ramp_get_target(ramp_t *ramp){
- return ramp->target;
- }
- bool ramp_complete(ramp_t *ramp) {
- return ramp->target == ramp->final_point;
- }
- void ramp_timer_handler(shark_timer_t *timer) {
- ramp_t *ramp = (ramp_t *)timer;
- float target = ramp->target + ramp->steps;
- if (ramp->steps < 0) {
- if (target < ramp->final_point) {
- target = ramp->final_point;
- }
- }else {
- if (target > ramp->final_point) {
- target = ramp->final_point;
- }
- }
- ramp->target = target;
- if (target != ramp->final_point) {
- shark_timer_post(&ramp->timer, RAMP_INTVAL);
- }else {
- shark_timer_cancel(&ramp->timer);
- }
- }
|