From 3f5ce648d5f0eb62f5ad203951cf0e3ce99ad6cb Mon Sep 17 00:00:00 2001 From: cryptogopher Date: Fri, 9 Sep 2022 13:07:56 +0200 Subject: [PATCH] Add BME280 temperature display on timer ISR --- metronom.ino | 16 ++++++++++++++++ temperature.ino | 21 +++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 temperature.ino diff --git a/metronom.ino b/metronom.ino index e9be3bf..0d054c2 100644 --- a/metronom.ino +++ b/metronom.ino @@ -1,3 +1,15 @@ +#include "SAMDTimerInterrupt.h" +#include "SAMD_ISR_Timer.h" + +#define HW_TIMER_INTERVAL_MS 10 +SAMDTimer ITimer(TIMER_TC3); +SAMD_ISR_Timer ISR_Timer; + +void TimerHandler(void) { + ISR_Timer.run(); +} + + const uint BUZZER_PIN = 0; const uint BUTTON_LED_PIN = 5; @@ -14,6 +26,10 @@ void setup() { // Order of ISRs matter: RISING should be invoked first attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), buttonISRtime, CHANGE); attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), buttonISRstate, RISING); + + initTemperature(); + ITimer.attachInterruptInterval_MS(10, TimerHandler); + ISR_Timer.setInterval(1000, readTemperature); } void loop() { diff --git a/temperature.ino b/temperature.ino new file mode 100644 index 0000000..08d5ff3 --- /dev/null +++ b/temperature.ino @@ -0,0 +1,21 @@ +#include "grove_alphanumeric_display.h" +#include "Seeed_BME280.h" + +Seeed_Digital_Tube tube; +BME280 sensor; + +void initTemperature() { + // BME280 inits Wire + sensor.init(); + + tube.setTubeType(TYPE_4, TYPE_4_DEFAULT_I2C_ADDR); + tube.setBrightness(15); + tube.setBlinkRate(BLINK_OFF); + tube.setPoint(true,true); +} + +void readTemperature() { + char temperature_str[5]; + sprintf(temperature_str, "%4u", (unsigned int) (sensor.getTemperature() * 100.0)); + tube.displayString(temperature_str); +}