Skip to content

Commit ed8bfdb

Browse files
authored
Keep display highlight after confirm for 500ms (fixes #254) (#271)
1 parent 2a59bf1 commit ed8bfdb

File tree

3 files changed

+33
-12
lines changed

3 files changed

+33
-12
lines changed

src/OpenBikeSensorFirmware.cpp

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -462,12 +462,7 @@ void loop() {
462462
reportBluetooth();
463463
if (button.gotPressed()) { // after button was released, detect long press here
464464
// immediate user feedback - we start the action
465-
// invert state might be a bit long - it does not block next confirmation.
466-
if (config.displayConfig & DisplayInvert) {
467-
displayTest->normalDisplay();
468-
} else {
469-
displayTest->invert();
470-
}
465+
displayTest->highlight();
471466

472467
transmitConfirmedData = true;
473468
numButtonReleased++;
@@ -535,12 +530,6 @@ void loop() {
535530
log_i("Confirmed data flushed to sd.");
536531
transmitConfirmedData = false;
537532
}
538-
// back to normal display mode
539-
if (config.displayConfig & DisplayInvert) {
540-
displayTest->invert();
541-
} else {
542-
displayTest->normalDisplay();
543-
}
544533
}
545534
log_d("Time in loop: %lums %d inner loops, %d measures, %s , %d",
546535
currentTimeMillis - startTimeMillis, loops, lastMeasurements,

src/displays.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ void SSD1306DisplayDevice::showValues(
4747
HCSR04SensorInfo sensor1, HCSR04SensorInfo sensor2, uint16_t minDistanceToConfirm, int16_t batteryPercentage,
4848
int16_t TemperaturValue, int lastMeasurements, boolean insidePrivacyArea,
4949
double speed, uint8_t satellites) {
50+
51+
handleHighlight();
5052
// Show sensor1, when DisplaySimple or DisplayLeft is configured
5153
if (config.displayConfig & DisplaySimple || config.displayConfig & DisplayLeft) {
5254
uint16_t value1 = sensor1.minDistance;
@@ -270,3 +272,26 @@ uint8_t SSD1306DisplayDevice::scrollUp() {
270272
uint8_t SSD1306DisplayDevice::startLine() {
271273
return mCurrentLine = 0;
272274
}
275+
276+
void SSD1306DisplayDevice::highlight(uint32_t highlightTimeMillis) {
277+
mHighlightTill = millis() + highlightTimeMillis;
278+
if (!mHighlighted) {
279+
if (mInverted) {
280+
m_display->normalDisplay();
281+
} else {
282+
m_display->invertDisplay();
283+
}
284+
mHighlighted = true;
285+
}
286+
}
287+
288+
void SSD1306DisplayDevice::handleHighlight() {
289+
if (mHighlighted && mHighlightTill < millis()) {
290+
if (mInverted) {
291+
m_display->invertDisplay();
292+
} else {
293+
m_display->normalDisplay();
294+
}
295+
mHighlighted = false;
296+
}
297+
}

src/displays.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,14 @@ class DisplayDevice {
7373

7474
class SSD1306DisplayDevice : public DisplayDevice {
7575
private:
76+
void handleHighlight();
7677
SSD1306* m_display;
7778
String gridText[ 4 ][ 6 ];
7879
uint8_t mLastProgress = 255;
7980
uint8_t mCurrentLine = 0;
81+
bool mInverted = false;
82+
uint32_t mHighlightTill = 0;
83+
bool mHighlighted = false;
8084

8185
public:
8286
SSD1306DisplayDevice() : DisplayDevice() {
@@ -95,6 +99,7 @@ class SSD1306DisplayDevice : public DisplayDevice {
9599
uint8_t newLine();
96100
uint8_t scrollUp();
97101
uint8_t startLine();
102+
void highlight(uint32_t highlightTimeMillis = 500);
98103

99104
//##############################################################
100105
// Basic display configuration
@@ -103,11 +108,13 @@ class SSD1306DisplayDevice : public DisplayDevice {
103108
void invert() {
104109
m_display->invertDisplay();
105110
m_display->display();
111+
mInverted = true;
106112
}
107113

108114
void normalDisplay() {
109115
m_display->normalDisplay();
110116
m_display->display();
117+
mInverted = false;
111118
}
112119

113120
void flipScreen() {

0 commit comments

Comments
 (0)