#include <jled.h>
#include <OneButton.h>
#include <Preferences.h>
#define RED_PIN 15
#define GREEN_PIN 13
#define BLUE_PIN 12
#define MICRO_PIN 0
#define BTN1_PIN 5
#define BTN2_PIN 4
#define FADE_ON_STEP 1
#define FADE_STEP 5
#define FADE_OFF_STEP 1
enum Mode {BEATS, SOLID};
Mode mode = BEATS;
Preferences prefs;
byte color;
byte fade;
auto led_r = JLed(RED_PIN);
auto led_g = JLed(GREEN_PIN);
auto led_b = JLed(BLUE_PIN);
auto micro = OneButton(MICRO_PIN, true, true);
auto btn1 = OneButton(BTN1_PIN, true, true);
auto btn2 = OneButton(BTN2_PIN, true, true);
void blink(); void increasesFade(); void decreasesFade(); void updateFade(); void togglesColor(); void ledsOff(); void ledsOn(); void togglesMode(); void beats(); void solid();
void setup() {
Serial.begin(9600);
Serial.println("setup");
prefs.begin("social-drum");
color = prefs.getChar("color", 1);
fade = prefs.getChar("fade", 1);
micro.setDebounceMs(1);
micro.attachClick(blink);
btn1.attachClick(togglesColor);
btn1.attachLongPressStart(togglesMode);
btn2.attachClick(decreasesFade);
btn2.attachLongPressStart(increasesFade);
Serial.println("end setup");
}
void loop() {
led_r.Update();
led_g.Update();
led_b.Update();
micro.tick();
btn1.tick();
btn2.tick();
}
void togglesColor() {
color < 6 ? color++ : color = 1;
prefs.putChar("color", color);
Serial.println("toggles color to " + String(color));
switch (mode) {
case BEATS:
blink();
break;
case SOLID:
ledsOn();
break;
}
}
void increasesFade() {
if (fade < 20) {
fade++;
updateFade();
}
}
void decreasesFade() {
if (fade > 1) {
fade--;
updateFade();
}
}
void updateFade() {
Serial.println("update fade to " + String(fade * FADE_STEP));
prefs.putChar("fade", fade);
if (mode == BEATS)
blink();
}
void togglesMode() {
switch (mode) {
case BEATS:
mode = SOLID;
solid();
break;
case SOLID:
mode = BEATS;
beats();
break;
}
}
void beats() {
Serial.println("leds mode BEATS");
ledsOff();
micro.attachClick(blink);
}
void solid() {
Serial.println("leds mode SOLID");
ledsOn();
micro.attachClick([]() {});
}
void ledsOff() {
led_r.Stop();
led_g.Stop();
led_b.Stop();
}
void ledsOn() {
Serial.println("leds on");
bitRead(color, 0) ? led_r.FadeOn(500) : led_r.Stop();
bitRead(color, 1) ? led_g.FadeOn(500) : led_g.Stop();
bitRead(color, 2) ? led_b.FadeOn(500) : led_b.Stop();
}
void blink() {
Serial.println("blink!!");
bitRead(color, 0) ? led_r.Blink(fade * FADE_STEP, 1).Repeat(1) : led_r.Stop();
bitRead(color, 1) ? led_g.Blink(fade * FADE_STEP, 1).Repeat(1) : led_g.Stop();
bitRead(color, 2) ? led_b.Blink(fade * FADE_STEP, 1).Repeat(1) : led_b.Stop();
}