Skip to content

Instantly share code, notes, and snippets.

@Dvorson
Created April 6, 2019 16:04
Show Gist options
  • Save Dvorson/6f60bd5c5d1e197e25352d8330bce55b to your computer and use it in GitHub Desktop.
Save Dvorson/6f60bd5c5d1e197e25352d8330bce55b to your computer and use it in GitHub Desktop.
#include "LowPower.h"
#define TONE_C 262
#define TONE_D 294
#define TONE_E 330
#define TONE_F 349
#define TONE_G 392
#define TONE_A 440
#define TONE_B 493
#define PIN_C 8
#define PIN_D 7
#define PIN_E 6
#define PIN_F 5
#define PIN_G 4
#define PIN_A 3
#define PIN_B 2
#define PIN_BUZZ 11
#define IDLE_SLEEP 5000
volatile unsigned long idleMs = 0, lastIdle = 0;
void wakeUp() {
lastIdle = millis();
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(PIN_C, INPUT);
digitalWrite(PIN_C,HIGH);
pinMode(PIN_D, INPUT);
digitalWrite(PIN_D,HIGH);
pinMode(PIN_E, INPUT);
digitalWrite(PIN_E,HIGH);
pinMode(PIN_F, INPUT);
digitalWrite(PIN_F,HIGH);
pinMode(PIN_G, INPUT);
digitalWrite(PIN_G,HIGH);
pinMode(PIN_A, INPUT);
digitalWrite(PIN_A,HIGH);
pinMode(PIN_B, INPUT);
digitalWrite(PIN_B,HIGH);
digitalWrite(LED_BUILTIN,LOW);
}
void loop() {
if (idleMs > IDLE_SLEEP) {
attachInterrupt(0, wakeUp, LOW);
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
} else {
LowPower.idle(SLEEP_FOREVER, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_ON,
SPI_OFF, USART0_OFF, TWI_OFF);
}
detachInterrupt(0);
while(digitalRead(PIN_C) == LOW) {
tone(PIN_BUZZ,TONE_C);
digitalWrite(LED_BUILTIN,HIGH);
lastIdle = millis();
}
while(digitalRead(PIN_D) == LOW) {
tone(PIN_BUZZ,TONE_D);
digitalWrite(LED_BUILTIN,HIGH);
lastIdle = millis();
}
while(digitalRead(PIN_E) == LOW) {
tone(PIN_BUZZ,TONE_E);
digitalWrite(LED_BUILTIN,HIGH);
lastIdle = millis();
}
while(digitalRead(PIN_F) == LOW) {
tone(PIN_BUZZ,TONE_F);
digitalWrite(LED_BUILTIN,HIGH);
lastIdle = millis();
}
while(digitalRead(PIN_G) == LOW) {
tone(PIN_BUZZ,TONE_G);
digitalWrite(LED_BUILTIN,HIGH);
lastIdle = millis();
}
while(digitalRead(PIN_A) == LOW) {
tone(PIN_BUZZ,TONE_A);
digitalWrite(LED_BUILTIN,HIGH);
lastIdle = millis();
}
while(digitalRead(PIN_B) == LOW) {
tone(PIN_BUZZ,TONE_B);
digitalWrite(LED_BUILTIN,HIGH);
lastIdle = millis();
}
noTone(PIN_BUZZ);
digitalWrite(LED_BUILTIN,LOW);
idleMs = millis() - lastIdle;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment