Extend timer range to 9 days & 23h + revert rotary encoder

This commit is contained in:
Pierrick C 2019-06-17 11:26:18 +02:00
parent 0d321e4a9d
commit 3b9294a9bc
2 changed files with 47 additions and 22 deletions

View File

@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <RotaryEncoder.h> #include <RotaryEncoder.h>
#include "SevSeg.h" #include <SevSeg.h>
#include <EveryTimer.h> #include <EveryTimer.h>
#include <AccelStepper.h> #include <AccelStepper.h>
@ -39,12 +39,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define ROT_BUTT 11 #define ROT_BUTT 11
#define ROT_ENC_1 12 #define ROT_ENC_1 12
#define ROT_ENC_2 13 #define ROT_ENC_2 13
#define ROT_ENC_DIR -1
#define STEPPER_STEP 10 #define STEPPER_STEP 10
#define STEPPER_DIRECTION 0 #define STEPPER_DIRECTION 0
#define STEPPER_ENABLE A5 #define STEPPER_ENABLE A5
//SETTINGS //SETTINGS
#define SEVSEG_REFRESH 250 // Refresh rate in ms #define SEVSEG_REFRESH 250 // Refresh rate in ms
#define SEVSEG_BRIGHTNESS 100 // 100%, full brightness #define SEVSEG_BRIGHTNESS 100 // 100%, full brightness
@ -80,6 +80,7 @@ bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
long refresh_timer = 0; long refresh_timer = 0;
long countdown = 0; long countdown = 0;
byte days = 0;
byte hours = 0; byte hours = 0;
byte minutes = 0; byte minutes = 0;
byte seconds = 0; byte seconds = 0;
@ -94,7 +95,7 @@ void countdown_callback() {
if (countdown < 0) { if (countdown < 0) {
countdown = 0; countdown = 0;
} }
recalculate_HMS(); recalculate_DHMS();
//Serial.println(countdown); //Serial.println(countdown);
} }
else { else {
@ -116,8 +117,15 @@ void calculate_display_callback() {
else { else {
digitalWrite(SEVSEG_COLON, false); digitalWrite(SEVSEG_COLON, false);
} }
//Display HH:MM or MM:SS if there is less than 1h left //Display dd:HH if there is more than 1day left, HH:MM if less or MM:SS if there is less than 1h left
if (hours) { if (days) {
char dispBuf[] = "0d00";
dispBuf[0] = days + 48;
dispBuf[2] = (hours / 10) + 48;
dispBuf[3] = (hours % 10) + 48;
sevseg.setChars(dispBuf);
}
else if (hours) {
sevseg.setNumber(100*hours+minutes); sevseg.setNumber(100*hours+minutes);
} else { } else {
sevseg.setNumber(100*minutes+seconds); sevseg.setNumber(100*minutes+seconds);
@ -137,11 +145,12 @@ void update_encoder() {
if (currVal != newVal) { if (currVal != newVal) {
currVal = newVal; currVal = newVal;
if (mode == 0) { // Mode 0 : speed setting if (mode == 0) { // Mode 0 : speed setting
multiplier = 10;
if (current_rpm >= 500) { if (current_rpm >= 500) {
multiplier = 100; // default : 1 encoder step = +/- 10 step/min multiplier = 100; // default : 1 encoder step = +/- 10 step/min
// if speed > 500 : encoder step = +/- 100 step/min // if speed > 500 : encoder step = +/- 100 step/min
} }
new_rpm += multiplier * dir; new_rpm += multiplier * dir * ROT_ENC_DIR;
if (new_rpm < STEPPER_MIN_SPEED) { if (new_rpm < STEPPER_MIN_SPEED) {
new_rpm = STEPPER_MIN_SPEED; new_rpm = STEPPER_MIN_SPEED;
} }
@ -151,20 +160,27 @@ void update_encoder() {
} }
if (mode == 1) { //mode 1 : countdown setting if (mode == 1) { //mode 1 : countdown setting
multiplier = 60; // default : 1 encoder step = +/- 1min multiplier = 60; // default : 1 encoder step = +/- 1min
// if countdown > 1h : encoder step = +/- 1h // if countdown > 1h : encoder step = +/- 10min (600s)
if (countdown >= 3600) { // if countdown > 1d : encoder step = +/- 1h (3600s)
if (countdown >= 86400) {
multiplier = 3600;
}
else if (countdown >= 3600) {
multiplier = 600; multiplier = 600;
} }
countdown += multiplier * dir; countdown += multiplier * dir * ROT_ENC_DIR;
//Min: 0 = no negative timer value
if (countdown < 0) { if (countdown < 0) {
countdown = 0; countdown = 0;
} }
// Max: 86400s = 1 day // Max: 864000s = 10 days
if (countdown >= 86400) { if (countdown >= 864000) {
countdown = 86399; countdown = 863999;
} }
recalculate_HMS();
recalculate_DHMS();
} }
Serial.print("RPM: "); Serial.print("RPM: ");
Serial.print(new_rpm); Serial.print(new_rpm);
@ -217,7 +233,14 @@ void update_stepper() {
} }
} }
void recalculate_HMS() { void recalculate_DHMS() {
//Calculate days, hours, minutes and seconds to be display
if (countdown >= 86400) {
days = countdown / 86400;
hours = (countdown % 86400) / 3600;
}
else {
days = 0;
minutes = (countdown / 60) % 60; minutes = (countdown / 60) % 60;
if (countdown >= 3600) { if (countdown >= 3600) {
hours = countdown / 3600; hours = countdown / 3600;
@ -226,6 +249,7 @@ void recalculate_HMS() {
hours = 0; hours = 0;
seconds = countdown % 60; seconds = countdown % 60;
} }
}
} }
void setup() void setup()

1
doc/README.md Normal file
View File

@ -0,0 +1 @@