Files
metronom/tube.ino
cryptogopher c2af98d588 Display also humidity and pressure
Display update triggered by value change, not interval
2026-02-12 00:10:45 +01:00

52 lines
1.3 KiB
C++

#include "grove_alphanumeric_display.h"
Seeed_Digital_Tube tube;
char tubeText[5] = "";
void initTube() {
// Wire initialized by BME280 sensor
tube.setTubeType(TYPE_4, TYPE_4_DEFAULT_I2C_ADDR);
tube.setBrightness(15);
tube.setBlinkRate(BLINK_OFF);
}
void rotateTube() {
displaySensor = (displaySensor + 1) % SENSORS;
tubeRotated = true;
}
void updateTube() {
char newText[5];
bool highPoint = false, lowPoint = false;
uint value = countdown;
if (countdown <= 0) {
switch (displaySensor) {
case TEMPERATURE:
value = (uint) (sensorValue[TEMPERATURE] * 100);
lowPoint = true;
break;
case HUMIDITY:
// TODO: add % sign?
value = (uint) (sensorValue[HUMIDITY]);
break;
case PRESSURE:
value = (uint) (sensorValue[PRESSURE] / 100);
break;
}
}
sprintf(newText, "%4u", value);
// TODO: In the current mode of display refresh (displayNeedsUpdate) it should not be necessary to check previous text
// Maybe add LED switching for case when the strings match as a rough check before removing comparison?
// Or LED switching when display is updated?
if (strcmp(tubeText, newText)) {
strcpy(tubeText, newText);
tube.displayString(tubeText);
tube.setPoint(highPoint, lowPoint);
tube.display();
}
displayNeedsUpdate = false;
}