diff --git a/metronom.ino b/metronom.ino index fa8a1db..1f4dde7 100644 --- a/metronom.ino +++ b/metronom.ino @@ -1,5 +1,6 @@ #include "SAMDTimerInterrupt.h" #include "SAMD_ISR_Timer.h" +#include "grove_alphanumeric_display.h" #define HW_TIMER_INTERVAL_MS 10 SAMDTimer ITimer(TIMER_TC3); @@ -7,7 +8,9 @@ SAMD_ISR_Timer ISR_Timer; void TimerHandler(void) { ISR_Timer.run(); } -const int COUNTDOWN = 300; +Seeed_Digital_Tube tube; + +const int COUNTDOWN = 240; const int PERIOD_MS = 1000; const uint BUTTON_PIN = 6; @@ -20,15 +23,25 @@ const uint BUZZER_PIN = 0; * >0 - COUNTDOWN */ volatile int countdown = -1; +volatile float temperature = 0.0; void setup() { initButton(); + initTemperature(); + + // Wire initialized by temperature sensor + tube.setTubeType(TYPE_4, TYPE_4_DEFAULT_I2C_ADDR); + tube.setBrightness(15); + tube.setBlinkRate(BLINK_OFF); + tube.setPoint(true,true); ITimer.attachInterruptInterval_MS(10, TimerHandler); - ISR_Timer.setInterval(PERIOD_MS, metronomeRun); + ISR_Timer.setInterval(PERIOD_MS, runMetronome); + ISR_Timer.setInterval(PERIOD_MS, readTemperature); + ISR_Timer.setInterval(PERIOD_MS, updateTube); } -void metronomeRun() { +void runMetronome() { if (countdown > 0) { countdown -= 1; @@ -38,4 +51,15 @@ void metronomeRun() { } } +void updateTube() { + char tube_str[5]; + + if (countdown <= 0) + sprintf(tube_str, "%4u", (unsigned int) (temperature * 100.0)); + else + sprintf(tube_str, "%4u", countdown); + + tube.displayString(tube_str); +} + void loop() {} diff --git a/temperature.ino b/temperature.ino new file mode 100644 index 0000000..42f64cf --- /dev/null +++ b/temperature.ino @@ -0,0 +1,12 @@ +#include "Seeed_BME280.h" + +BME280 sensor; + +void initTemperature() { + sensor.init(); +} + +void readTemperature() { + // TODO: add hysteresis + temperature = sensor.getTemperature(); +}