#include <Adafruit_CircuitPlayground.h>
unsigned char bl, br, sel;
unsigned short csec, sec;
const unsigned short tune[] = { // Aphex Twin - Avril 14th
415, 0, 698, 0, 831, 0, 1047, 0,
523, 0, 784, 0, 1047, 0, 1245, 0,
1047, 0, 0, 0, 698, 0, 0, 0,
831, 0, 1109, 0, 1047, 0, 831, 0, 698
};
void setup() {
pinMode(13, OUTPUT); // red LED
CircuitPlayground.begin();
sel = 1;
}
void redraw(void) {
unsigned char active = sec / 60;
for (unsigned char i = 0; i < 10; i++) {
if (i == active)
CircuitPlayground.setPixelColor(i, 0x72ffc2 * (sec & 0x1));
else
CircuitPlayground.setPixelColor(i, (sel ? 0xffffff : 0xff0000) * (sec / 60 > i) * !!sec);
}
digitalWrite(13, sec & 0x1 ? HIGH : LOW);
}
void set_sec(unsigned short s) {
sec = s;
csec = 0;
sel = 1;
redraw();
}
void handle_buttons(void) {
if (CircuitPlayground.leftButton()) {
if (!bl) {
set_sec(sec < 60 ? 0 : (sec / 60) * 60 - 1);
}
bl = 1;
}
else
bl = 0;
if (CircuitPlayground.rightButton()) {
if (!br) {
set_sec(sec >= 600 ? 600 : (sec / 60) * 60 + 60);
}
br = 1;
}
else
br = 0;
}
void on_sec(void) {
if (!sec)
return;
if (sel)
sel = 0;
sec--;
csec = 0;
redraw();
}
void play_end(void) {
for (unsigned char i = 0; i < 33; i++)
CircuitPlayground.playTone(tune[i], 50);
sec = 0;
redraw();
}
void loop() {
if (sec == 1)
play_end();
handle_buttons();
if (csec++ > 100)
on_sec();
delay(10);
}