#include "Arduino.h"
#include <FastLED.h>
#include "meta.h"
#define LED_PIN 5
#define BRIGHTNESS 100
#define LED_TYPE WS2811
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
#define ENCODER_CLK 2
#define ENCODER_DT 4
#define ENCODER_SW 3
#define DESING_CNT 3
#define UPDATES_PER_SECOND 100
#include "design.h"
#include "stacking.h"
//#include "helix.h"
#include "matrix.h"
Design *design[DESING_CNT];
uint8_t design_cnt;
void setup() {
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
FastLED.setBrightness( BRIGHTNESS );
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_SW, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), readEncoder, FALLING);
attachInterrupt(digitalPinToInterrupt(ENCODER_SW), readBnt, FALLING);
Serial.begin(115200); // Any baud rate should work
Serial.println("Hello Arduino\n");
uint8_t tmp_cnt = 0;
design[tmp_cnt] = new Stacking();
tmp_cnt++;
design[tmp_cnt] = new Matrix();
// design[tmp_cnt] = new Helix();
tmp_cnt++;
design_cnt = 0;
}
int8_t next = 0;
void readEncoder() {
if (next == 0) {
int dtValue = digitalRead(ENCODER_DT);
if (dtValue == HIGH) {
next = 1;
}
if (dtValue == LOW) {
next = -1;
}
}
}
int8_t bnt =0;
void readBnt() {
if (bnt == 0) {
bnt = 1;
}
}
void loop()
{
design[design_cnt]->init();
while (1) {
if(next != 0){
design_cnt = abs(design_cnt + next) % DESING_CNT ;
design[design_cnt]->init();
next=0;
}
if(bnt != 0){
design[design_cnt]->button();
bnt =0;
}
design[design_cnt]->next_step(leds);
FastLED.show();
delay(1000 / 40);
}
}