#include <ContinuousStepper.h>
#include <JC_Button.h>
const uint8_t pin_stepper_dir = 2;
const uint8_t pin_stepper_step = 3;
const uint8_t pin_button_left = 4;
const uint8_t pin_button_right = 5;
const int16_t acceleration = 100;
const int16_t deceleration = 50;
const int16_t target_rpm = 60;
ContinuousStepper<StepperDriver> stepper;
Button button_left( pin_button_left );
Button button_right( pin_button_right );
void spin( const int16_t rpm )
{
stepper.setAcceleration( acceleration );
stepper.spin( rpm * 200.f / 60.f );
}
void stop()
{
stepper.setAcceleration( deceleration );
stepper.stop();
}
void setup()
{
Serial.begin( 115200 );
stepper.begin( pin_stepper_step, pin_stepper_dir );
button_left.begin();
button_right.begin();
}
void loop()
{
stepper.loop();
button_left.read();
button_right.read();
if ( button_left.wasPressed() )
{
spin( -target_rpm );
}
else if ( button_right.wasPressed() )
{
spin( target_rpm );
}
else if ( button_left.wasReleased() || button_right.wasReleased() )
{
stop();
}
const int16_t actual_rpm = round( stepper.speed() / 200.f * 60.f );
static int16_t previous_rpm = actual_rpm;
if ( previous_rpm != actual_rpm )
{
previous_rpm = actual_rpm;
Serial.print( F( "Actual speed : " ) );
Serial.print( actual_rpm );
Serial.println( F( " RPM" ) );
}
}