class Timer
{
public:
void start() {
timeStamp = millis();
}
bool operator() (const unsigned long duration) {
return (millis() - timeStamp >= duration) ? true : false;
}
private:
unsigned long timeStamp {0};
};
enum class ButtonState : byte {released, pressed, wait};
enum class DegasState : byte {start, isActive, off, stop};
constexpr unsigned int BUTTON_TIMESPAN {5000}; // 5 Sek. pressed delay
constexpr unsigned int DEGAS_TIMESPANE {10000}; // 10 Sek. Degas change it to 180000
constexpr byte B_PIN {4};
constexpr byte LED_PIN {LED_BUILTIN}; // Use built in LED
Timer bTimer;
Timer dTimer;
ButtonState bState {ButtonState::released};
DegasState dState {DegasState::off};
void button(byte);
bool degas();
void degasAction();
void setup() {
Serial.begin(115200);
pinMode(B_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
Serial.println("Start");
}
void loop() {
button(B_PIN);
if (degas()) { // When true do degas for DEGAS_TIMESPAN time
degasAction();
}
}
void button(byte pin) {
if (!digitalRead(pin) && dState != DegasState::isActive) {
if (bState != ButtonState::wait) bState = ButtonState::pressed;
} else {
bState = ButtonState::released;
if (digitalRead(LED_PIN)) digitalWrite(LED_PIN,LOW); // Indicate button released or off
}
switch (bState) {
case ButtonState::pressed:
if(!digitalRead(LED_PIN)) digitalWrite(LED_PIN,HIGH); // Indicate button press
bTimer.start();
bState = ButtonState::wait;
break;
case ButtonState::wait:
if (bTimer(BUTTON_TIMESPAN)) {
dState = DegasState::start;
}
break;
default:
break;
}
}
bool degas() {
bool isActive {false};
switch (dState) {
case DegasState::start:
Serial.println("Degas started");
dState = DegasState::isActive;
dTimer.start();
break;
case DegasState::isActive:
isActive = true;
if (dTimer(DEGAS_TIMESPANE )) {
dState = DegasState::stop;
}
break;
case DegasState::stop:
Serial.println("Degas ended");
digitalWrite (2, LOW);
dState = DegasState::off;
break;
default:
break;
}
return isActive;
}
void degasAction() {
digitalWrite (2, HIGH);
static unsigned long lastSpam;
unsigned long onw = millis();
if (onw - lastSpam > 777) {
Serial.println("Degas function active");
lastSpam = onw;
}
/*
TCA9548A(3);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(35, 5);
display.println("Degas");
display.display();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(45, 50);
display.println("mbar");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(15, 10);
display.print(sci(pressure_mbar2, 2));
display.display();
*/
}