From 943668711671cec5efa238daed28cfe0e2828d5c Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Wed, 21 May 2014 02:02:40 +0200 Subject: cleaned up stepper state added rpm based inc speed commands --- tube-rotator/stepper.c | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) (limited to 'tube-rotator/stepper.c') diff --git a/tube-rotator/stepper.c b/tube-rotator/stepper.c index 3a08cd4..43e194f 100644 --- a/tube-rotator/stepper.c +++ b/tube-rotator/stepper.c @@ -49,7 +49,7 @@ uint8_t step_table [] = volatile uint16_t target_speed; uint16_t current_speed; -uint8_t running; +stepper_state_t current_state; void stepper_init(void) { @@ -61,7 +61,7 @@ void stepper_init(void) void stepper_start(void) { - if(running) return; + if(current_state == stepper_running) return; current_speed = STEPPER_SPEED_MIN; STEPPER_PORT |= (1<= STEPPER_SPEED_MAX) { @@ -134,10 +148,22 @@ uint16_t stepper_get_speed(void) void stepper_set_speed_rpm(uint8_t new_rpm) { - stepper_set_speed(( (uint16_t)( (double)(60.0 * F_CPU) / (double)(64.0 * 800.0 * (double)new_rpm) ) ) - 1); + stepper_set_speed(( (uint16_t)lround( (double)(60.0 * F_CPU) / (double)(64.0 * 800.0 * (double)new_rpm) ) ) - 1); } uint8_t stepper_get_speed_rpm(void) { return (uint8_t)lround( ( (double)F_CPU / (double)(64.0 * 800.0 * (double)(target_speed + 1) ) ) * 60.0 ); } + +void stepper_inc_speed_rpm(void) +{ + uint8_t rpm = stepper_get_speed_rpm(); + stepper_set_speed_rpm((rpm >= 255) ? 255 : rpm+1); +} + +void stepper_dec_speed_rpm(void) +{ + uint8_t rpm = stepper_get_speed_rpm(); + stepper_set_speed_rpm((rpm <= 1) ? 1 : rpm-1); +} -- cgit v1.2.3