From 4a46ee65b9001fd7add8262adbcaeebcb9c100ff Mon Sep 17 00:00:00 2001 From: cryptogopher Date: Thu, 8 Sep 2022 22:54:21 +0200 Subject: [PATCH] Initial commit --- button.ino | 14 ++++++++++++++ metronom.ino | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 button.ino create mode 100644 metronom.ino diff --git a/button.ino b/button.ino new file mode 100644 index 0000000..9fd0b9b --- /dev/null +++ b/button.ino @@ -0,0 +1,14 @@ +volatile unsigned long lastButtonPress = millis(); + +void buttonISRstate() { + if ((millis() - lastButtonPress) > 100) { + if (countdown > 0) + countdown = 0; + else + countdown = BREAK_LENGTH; + } +} + +void buttonISRtime() { + lastButtonPress = millis(); +} diff --git a/metronom.ino b/metronom.ino new file mode 100644 index 0000000..e9be3bf --- /dev/null +++ b/metronom.ino @@ -0,0 +1,32 @@ +const uint BUZZER_PIN = 0; + +const uint BUTTON_LED_PIN = 5; +const uint BUTTON_PIN = 6; + +const int BREAK_LENGTH = 300000; +const int BREAK_STEP = 2000; + +volatile int countdown = 0; +int step; + +void setup() { + pinMode(BUTTON_PIN, INPUT_PULLUP); + // Order of ISRs matter: RISING should be invoked first + attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), buttonISRtime, CHANGE); + attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), buttonISRstate, RISING); +} + +void loop() { + if (countdown > 0) { + step = min(BREAK_STEP, countdown); + countdown -= step; + + digitalWrite(BUTTON_LED_PIN, HIGH); + delay(min(BREAK_STEP/2, step)); + digitalWrite(BUTTON_LED_PIN, LOW); + delay(max(step-BREAK_STEP/2, 0)); + } else { + tone(BUZZER_PIN, 1000, 100); + delay(1000); + } +}