#include <WS2812FX.h>
#include <EncButton.h>
//#include <GyverEncoder.h>
#define LED1_PIN 2 // digital pin used to drive the LED strip
#define LED2_PIN 3 // digital pin used to drive the LED strip
#define LED1_COUNT 65 // number of LEDs on the strip
#define LED2_COUNT 30 // number of LEDs on the strip
#define CLK 6
#define DT 5
#define SW 4
byte Option = 0;
int q = 0;
//int w = 0;
//int e = 0;
int speed1 = 1000;
int speed2 = 1000;
uint8_t effectmode1;
uint8_t effectmode2;
//FX_MODE_STATIC, FX_MODE_STATIC, FX_MODE_RAINBOW, FX_MODE_RAINBOW_CYCLE, FX_MODE_CHASE_RAINBOW, FX_MODE_COLOR_SWEEP_RANDOM, FX_MODE_RUNNING_RANDOM, FX_MODE_RAINBOW_FIREWORKS, FX_MODE_RAINBOW_LARSON, FX_MODE_BITS
String modes1 = "";
String modes2 = "";
uint8_t mode1[] = {};
uint8_t mode2[] = {};
EncButton enc(SW, DT, CLK);
WS2812FX ws2812fx1 = WS2812FX(LED1_COUNT, LED1_PIN, NEO_GRB + NEO_KHZ800);
WS2812FX ws2812fx2 = WS2812FX(LED2_COUNT, LED2_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(115200);
ws2812fx1.init();
ws2812fx1.setBrightness(10);
ws2812fx2.init();
ws2812fx2.setBrightness(10);
ws2812fx1.setSegment(0, 0, 65, FX_MODE_STATIC, 0x000001, speed1, false);
ws2812fx2.setSegment(0, 0, 30, FX_MODE_STATIC, 0x000001, speed2, false);
modes1 = "";
uint8_t num_modes = sizeof(mode1) > 0 ? sizeof(mode1) : ws2812fx1.getModeCount();
for(uint8_t i=0; i < num_modes; i++) {
uint8_t m = sizeof(mode1) > 0 ? mode1[i] : i;
modes1 += ws2812fx1.getModeName(m);
}
modes2 = "";
for(uint8_t i=0; i < num_modes; i++) {
uint8_t m = sizeof(mode2) > 0 ? mode2[i] : i;
modes2 += ws2812fx2.getModeName(m);
}
ws2812fx1.start();
ws2812fx2.start();
}
void loop() {
enc.tick();
ws2812fx1.service();
ws2812fx2.service();
switch (Option) {
case 0:
// Option1();
// Speed1();
Serial.println("Section 1");
break;
case 1:
// Option2();
// Speed2();
Serial.println("Section 2");
break;
case 2:
// changeBrightness();
Serial.println("Brightness");
break;
}
if (enc.hasClicks(1)) {
Option++;
}
if (enc.hasClicks(2)) {
Option--;
}
}
/*
void Option1() {
if (enc.right() && q < ws2812fx1.getModeCount()) q++;
if (enc.left() && q > 0) q--;
if (enc.turn()) {
if (q == 0) {
Serial.println(q);
ws2812fx1.setSegment(0, 0, 29, FX_MODE_STATIC, 0x000001, speed1, false);
}
else {
uint8_t new_mode = sizeof(mode1) > 0 ? mode1[q % sizeof(mode1)] : q % ws2812fx1.getModeCount();
Serial.println(q);
ws2812fx1.setSegment(0, 0, 29, new_mode, 0xFFFFFF, speed1, false);
}
}
}
void Speed1() {
if (enc.rightH() && speed1 < 100000) speed1 += 1000;
if (enc.leftH() && speed1 > 0) speed1 -= 1000;
if (enc.turnH()) {
if (q == 0) {
Serial.println(speed1);
ws2812fx1.setSegment(0, 0, 29, FX_MODE_STATIC, 0x000001, speed1, false);
}
else {
uint8_t new_mode = sizeof(mode1) > 0 ? mode1[q % sizeof(mode1)] : q % ws2812fx1.getModeCount();
Serial.println(speed1);
ws2812fx1.setSegment(0, 0, 29, new_mode, 0xFFFFFF, speed1, false);
}
}
}
void Option2() {
if (enc.right() && q < ws2812fx1.getModeCount()) q++;
if (enc.left() && q > 0) q--;
if (enc.turn()) {
if (q == 0) {
Serial.println(q);
ws2812fx1.setSegment(1, 30, 63, FX_MODE_STATIC, 0x000001, speed2, false);
}
else {
uint8_t new_mode = sizeof(mode2) > 0 ? mode2[q % sizeof(mode2)] : q % ws2812fx1.getModeCount();
Serial.println(q);
ws2812fx1.setSegment(1, 30, 63, new_mode, 0xFFFFFF, speed2, false);
}
}
}
void Speed2() {
if (enc.rightH() && speed2 < 100000) speed2 += 1000;
if (enc.leftH() && speed2 > 0) speed2 -= 1000;
if (enc.turnH()) {
if (q == 0) {
Serial.println(speed2);
ws2812fx1.setSegment(1, 30, 63, FX_MODE_STATIC, 0x000001, speed2, false);
}
else {
uint8_t new_mode = sizeof(mode2) > 0 ? mode2[q % sizeof(mode2)] : q % ws2812fx1.getModeCount();
Serial.println(speed2);
ws2812fx1.setSegment(1, 30, 63, new_mode, 0xFFFFFF, speed2, false);
}
}
}
void changeBrightness() {
int brightness = ws2812fx1.getBrightness();
if (enc.right()) {
brightness += 5;
} else if (enc.left()) {
brightness -= 5;
}
if (brightness < 0) {
brightness = 0;
} else if (brightness > 255) {
brightness = 255;
}
Serial.println(brightness);
ws2812fx1.setBrightness(brightness);
}*/