add software debounce

This commit is contained in:
melody 2025-08-18 13:54:26 +02:00
commit 5fd1543e3f

View file

@ -51,7 +51,9 @@ public:
return this->data[realIndex];
}
int getCursor() const { return this->rCount; }
int getCursor() const {
return this->rCount;
}
float getMaxDataPoint() {
if (this->rCount == 0) return 0;
@ -82,7 +84,9 @@ public:
return sum / this->rCount;
}
String getUnit() { return this->UNIT; }
String getUnit() {
return this->UNIT;
}
};
class Element {
@ -130,7 +134,6 @@ class MaxAvgMinElement : public Element {
tft.print(F("Min: "));
tft.print(this->data.getMinDataPoint(), 1);
tft.print(unit);
};
};
@ -144,7 +147,9 @@ private:
return X + 2 + (int)(i * (this->WIDTH - 3) / (this->AMOUNT_DATAPOINTS - 1));
}
int getScaledY(float value) { return this->getScaledY(value, this->data.getMinDataPoint(), this->data.getMaxDataPoint()); }; // OOP is soo cool
int getScaledY(float value) {
return this->getScaledY(value, this->data.getMinDataPoint(), this->data.getMaxDataPoint());
}; // OOP is soo cool
int getScaledY(float value, float minY, float maxY) {
if (maxY - minY == 0) return this->Y + this->HEIGHT / 2;
@ -187,7 +192,8 @@ class Screen {
protected:
Element** elements;
public:
Screen(Element** elems) : elements(elems){};
Screen(Element** elems)
: elements(elems){};
void draw() {
for (int i = 0; this->elements[i] != nullptr; i++) {
this->elements[i]->render();
@ -202,7 +208,8 @@ class DisplayConfig {
int screenCount;
public:
DisplayConfig(Screen** screens) : screens(screens), screenIndex(0), screenCount(0){
DisplayConfig(Screen** screens)
: screens(screens), screenIndex(0), screenCount(0) {
while (this->screens[this->screenCount] != nullptr) this->screenCount++;
tft.initR(INITR_MINI160x80);
tft.setRotation(1);
@ -218,17 +225,23 @@ class DisplayConfig {
return this->applyScreen(this->screenIndex);
}
Screen* getCurrentScreen() {return this->screens[this->screenIndex];}
Screen* getCurrentScreenIndex() {return this->screenIndex;}
Screen* getCurrentScreen() {
return this->screens[this->screenIndex];
}
Screen* getCurrentScreenIndex() {
return this->screenIndex;
}
};
unsigned long previousMillis = -1000000000;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
bool buttonPressedLastCycle = false;
bool sht3xErrorLastCycle = false;
// CONFIG START
DataStorage* tempData;
DataStorage* humData;
@ -334,10 +347,12 @@ void loop() {
sht3xErrorLastCycle = true;
}
}
if (digitalRead(buttonPin)) {
if (!buttonPressedLastCycle){
if (!buttonPressedLastCycle && millis() - lastDebounceTime > debounceDelay) {
config->cycleScreen()->draw();
buttonPressedLastCycle = true;
lastDebounceTime = millis();
}
} else {
buttonPressedLastCycle = false;