Faster display without loosing motor speed

Fixed display when RPM = 0 or countdown = 0
This commit is contained in:
Pierrick C 2019-04-07 14:11:14 +02:00
parent 935ac6f7c6
commit d4175e4eef

View File

@ -47,7 +47,8 @@ RotaryEncoder encoder(ROT_ENC_1, ROT_ENC_2);
AccelStepper stepper(1, STEPPER_STEP, STEPPER_DIRECTION); AccelStepper stepper(1, STEPPER_STEP, STEPPER_DIRECTION);
EveryTimer timer; EveryTimer cntdwn;
EveryTimer calc_dspl;
//Global variables //Global variables
@ -74,42 +75,42 @@ static bool currBut = true;
byte mode = 0; byte mode = 0;
void countdown_callback() { void countdown_callback() {
if (current_rpm != 0) { if (current_rpm != 0) { // if speed = 0 => pause countdown
countdown--; countdown--;
if (countdown < 0) { if (countdown < 0) {
countdown = 0; countdown = 0;
} }
hours = countdown / 3600; recalculate_HMS();
minutes = (countdown / 60) % 60; //Serial.println(countdown);
seconds = countdown % 60;
// Update data to be displayed
if (mode == 0) { // mode 0 = display speed
digitalWrite(SEVSEG_COLON, false);
sevseg.setNumber(current_rpm);
}
else if (mode == 1) { // mode 1 = display countdown
//Blink colon each seconds
if (seconds % 2) {
digitalWrite(SEVSEG_COLON, true);
}
else {
digitalWrite(SEVSEG_COLON, false);
}
//Display HH:MM or MM:SS if there is less than 1h left
if (hours) {
sevseg.setNumber(100*hours+minutes);
} else {
sevseg.setNumber(100*minutes+seconds);
}
}
Serial.println(countdown);
} }
else { else {
Serial.println("Pause"); Serial.println("Pause");
} }
} }
void calculate_display_callback() {
// Update data to be displayed
if (mode == 0) { // mode 0 = display speed
digitalWrite(SEVSEG_COLON, false);
sevseg.setNumber(current_rpm);
}
else if (mode == 1) { // mode 1 = display countdown
//Blink colon each seconds
if (countdown % 2) {
digitalWrite(SEVSEG_COLON, true);
}
else {
digitalWrite(SEVSEG_COLON, false);
}
//Display HH:MM or MM:SS if there is less than 1h left
if (hours) {
sevseg.setNumber(100*hours+minutes);
} else {
sevseg.setNumber(100*minutes+seconds);
}
}
}
void update_encoder() { void update_encoder() {
static long currVal = 0; static long currVal = 0;
int multiplier = 10; int multiplier = 10;
@ -117,14 +118,16 @@ void update_encoder() {
encoder.tick(); encoder.tick();
long newVal = encoder.getPosition(); long newVal = encoder.getPosition();
int dir = encoder.getDirection();
if (currVal != newVal) { if (currVal != newVal) {
currVal = newVal; currVal = newVal;
if (mode == 0) { if (mode == 0) { // Mode 0 : speed setting
if (current_rpm >= 500) { if (current_rpm >= 500) {
multiplier = 100; multiplier = 100; // default : 1 encoder step = +/- 10 step/min
// if speed > 500 : encoder step = +/- 100 step/min
} }
new_rpm += multiplier * encoder.getDirection(); new_rpm += multiplier * dir;
if (new_rpm < STEPPER_MIN_SPEED) { if (new_rpm < STEPPER_MIN_SPEED) {
new_rpm = STEPPER_MIN_SPEED; new_rpm = STEPPER_MIN_SPEED;
} }
@ -132,21 +135,25 @@ void update_encoder() {
new_rpm = STEPPER_MAX_SPEED; new_rpm = STEPPER_MAX_SPEED;
} }
} }
if (mode == 1) { if (mode == 1) { //mode 1 : countdown setting
multiplier = 60; multiplier = 60; // default : 1 encoder step = +/- 1min
// if countdown > 1h : encoder step = +/- 1h
if (countdown >= 3600) { if (countdown >= 3600) {
multiplier = 600; multiplier = 600;
} }
countdown += multiplier * encoder.getDirection(); countdown += multiplier * dir;
if (countdown < 0) { if (countdown < 0) {
countdown = 0; countdown = 0;
} }
// Max: 86400s = 1 day
if (countdown >= 86400) { if (countdown >= 86400) {
countdown = 86399; countdown = 86399;
} }
recalculate_HMS();
} }
Serial.print("RPM: "); Serial.print("RPM: ");
Serial.print(current_rpm); Serial.print(new_rpm);
Serial.print(" | Countdown: "); Serial.print(" | Countdown: ");
Serial.println(countdown); Serial.println(countdown);
} }
@ -174,8 +181,10 @@ void update_encoder() {
} }
void update_stepper() { void update_stepper() {
//Update speend setting and ENABLE pin if new speed value
if (new_rpm != current_rpm) { if (new_rpm != current_rpm) {
new_rpm = current_rpm; current_rpm = new_rpm;
stepper.setSpeed(current_rpm); stepper.setSpeed(current_rpm);
// Enable/Disable motor // Enable/Disable motor
if (current_rpm == 0) { if (current_rpm == 0) {
@ -186,12 +195,23 @@ void update_stepper() {
stepper.enableOutputs(); stepper.enableOutputs();
Serial.println("Stepper : On"); Serial.println("Stepper : On");
} }
//if Countdown = 0 => pause (no move but keep speed setting)
if (countdown != 0 and current_rpm != 0) {
stepper.runSpeed();
}
} }
//if Countdown = 0 => pause (no move but keep speed setting)
if (countdown != 0 and current_rpm != 0) {
//Serial.println("Run motor !");
stepper.runSpeed();
}
}
void recalculate_HMS() {
minutes = (countdown / 60) % 60;
if (countdown >= 3600) {
hours = countdown / 3600;
}
else {
hours = 0;
seconds = countdown % 60;
}
} }
void setup() void setup()
@ -210,20 +230,21 @@ void setup()
stepper.setAcceleration(STEPPER_ACCELERATION); stepper.setAcceleration(STEPPER_ACCELERATION);
stepper.setSpeed(0); stepper.setSpeed(0);
timer.Every(1000, countdown_callback); cntdwn.Every(1000, countdown_callback);
calc_dspl.Every(SEVSEG_REFRESH, calculate_display_callback);
} }
void loop() void loop() {
{
update_encoder(); update_encoder();
//Update countdown
timer.Update();
//Make the motor move //Make the motor move
update_stepper(); update_stepper();
//Update countdown
cntdwn.Update();
//refresh the 7-segment display //refresh the 7-segment display
calc_dspl.Update();
sevseg.refreshDisplay(); sevseg.refreshDisplay();
} }