#include <FastLED.h>
#include "timers.h"
#define NUM_BUTTONS 10
#define NUM_TRACKS 4
//Global buttons variables
const uint8_t button[NUM_BUTTONS] {11, 10, 9, 8, 7, 6, 5, 4, 3, 2};
bool state[NUM_BUTTONS] {LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW};
bool oldState[NUM_BUTTONS] {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH};
uint8_t cont[NUM_BUTTONS] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
bool pressed[NUM_BUTTONS] {false, false, false, false, false, false, false, false, false, false};
bool isRecording = false;
bool isOverdubbing = false;
//Only for traks
bool trackRecorded[NUM_TRACKS] {false, false, false, false};
bool anyTrackSelected = false;
uint8_t lastPressed = 0;
/*
LEDS VARIABLES
*/
#define NUM_LEDS 6
#define NUM_RING 16
#define PIN_LEDS 12
#define PIN_RING 13
#define TYPE_LEDS WS2812
#define TYPE_RING WS2812
CRGB leds[NUM_LEDS];
CRGB ring[NUM_RING];
uint8_t ringUpdate = 0;
uint8_t lightsMode = 0;
void setup(){
lightsDebug();
for (uint8_t i=0; i<NUM_BUTTONS; i++){
pinMode(button[i], INPUT_PULLUP);
}
}
void loop(){
buttonMode();
track_1();
track_2();
track_3();
track_4();
play_Rec();
setTracksColors();
setRingColors();
}
//All leds turn off
void lightsDebug(){
FastLED.addLeds<TYPE_RING, PIN_RING, GRB>(ring, NUM_RING).setCorrection(TypicalLEDStrip);
FastLED.addLeds<TYPE_LEDS, PIN_LEDS, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
fill_solid (ring, NUM_RING, CRGB::Black);
fill_solid (leds, NUM_LEDS, CRGB::Black);
FastLED.show();
}
void buttonMode(){
state[3] = digitalRead(button[3]);
if ((state[3] == LOW) && (oldState[3] == HIGH)) {
if (buttonsTimer(50)){
state[3] = digitalRead(button[3]);
pressed[3] = true;
if (++cont[3] > 2) cont[3] = 1;
}
}
oldState[3] = state[3];
}
void track_1(){
state[4] = digitalRead(button[4]);
if ((state[4] == LOW) && (oldState[4] == HIGH)){
if (buttonsTimer(50)){
state[4] = digitalRead(button[4]);
pressed[4] = true;
anyTrackSelected = true;
lastPressed = 1;
}
//If track 1 is selected and mode is not selected others tracks reset
if ((cont[3] == 0) && (pressed[4] == true)){
pressed[4] = true;
pressed[5] = false;
pressed[6] = false;
pressed[7] = false;
}
//If mode button is selected just select track 1
if ((cont[3] >= 1) && (pressed[4] == true)){
pressed[4] = true;
}
}
oldState[4] = state[4];
}
void track_2(){
state[5] = digitalRead(button[5]);
if ((state[5] == LOW) && (oldState[5] == HIGH)){
if (buttonsTimer(50)){
state[5] = digitalRead(button[5]);
pressed[5] = true;
anyTrackSelected = true;
lastPressed = 2;
}
//If track 2 is selected and mode is not selected others tracks reset
if ((cont[3] == 0) && (pressed[5] == true)){
pressed[4] = false;
pressed[5] = true;
pressed[6] = false;
pressed[7] = false;
}
//If mode button is selected just select track 2
if ((cont[3] >= 1) && (pressed[5] == true)){
pressed[5] = true;
}
}
oldState[5] = state[5];
}
void track_3(){
state[6] = digitalRead(button[6]);
if ((state[6] == LOW) && (oldState[6] == HIGH)){
if (buttonsTimer(50)){
state[6] = digitalRead(button[6]);
pressed[6] = true;
anyTrackSelected = true;
lastPressed = 3;
}
//If track 3 is selected and mode is not selected others tracks reset
if ((cont[3] == 0) && (pressed[6] == true)){
pressed[4] = false;
pressed[5] = false;
pressed[6] = true;
pressed[7] = false;
}
//If mode button is selected just select track 3
if ((cont[3] >= 1) && (pressed[6] == true)){
pressed[6] = true;
}
}
oldState[6] = state[6];
}
void track_4(){
state[7] = digitalRead(button[7]);
if ((state[7] == LOW) && oldState[7] == HIGH){
if (buttonsTimer(50)){
state[7] = digitalRead(button[7]);
pressed[7] = true;
anyTrackSelected = true;
lastPressed = 4;
}
//If track 4 is selected and mode is not selected others tracks reset
if ((cont[3] == 0) && (pressed[7] == true)){
pressed[4] = false;
pressed[5] = false;
pressed[6] = false;
pressed[7] = true;
}
//If mode button is selected just select track 4
if ((cont[3] >= 1) && (pressed[7] == true)){
pressed[7] = true;
}
}
oldState[7] = state[7];
}
void play_Rec() {
static uint8_t cases = 0;
if ((pressed[3]==true) && (cont[3]==1)){
switch (cases) {
default:
ringUpdate = 1;
break;
case 1:
ringUpdate = 3;
break;
case 2:
ringUpdate = 4;
break;
}
}
if ((pressed[3]==true) && (cont[3]==2)){
switch (cases) {
default:
ringUpdate = 2;
break;
}
}
if ((pressed[3]==true) && (anyTrackSelected)) {
state[0] = digitalRead(button[0]);
if ((state[0]==LOW) && (oldState[0]==HIGH)){
if (buttonsTimer(50)) {
state[0] = digitalRead(button[0]);
pressed[0] = true;
if(lastPressed==1){
if(trackRecorded[0]==false){
Serial.println("Registro per la prima volta la traccia numero 1");
cases = 1;
isRecording = true;
isOverdubbing = false;
}
if(trackRecorded[0]==true){
if(++cont[0]>2) {cont[0] = 1;}
switch (cont[0]){
case 1:
Serial.println("Overdub sulla traccia numero 1");
cases = 2;
isRecording = false;
isOverdubbing = true;
break;
case 2:
Serial.println("Fine overdub sulla traccia numero 1");
cases = 0;
isRecording = false;
isOverdubbing = false;
break;
}
}
trackRecorded[0] = true;
}
if(lastPressed==2){
if(trackRecorded[1]==false){
Serial.println("Registro per la prima volta la traccia numero 2");
cases = 1;
isRecording = true;
isOverdubbing = false;
}
if(trackRecorded[1]==true){
if(++cont[0]>2) {cont[0] = 1;}
switch (cont[0]){
case 1:
Serial.println("Overdub sulla traccia numero 2");
cases = 2;
isRecording = false;
isOverdubbing = true;
break;
case 2:
Serial.println("Fine overdub sulla traccia numero 2");
cases = 0;
isRecording = false;
isOverdubbing = false;
break;
}
}
trackRecorded[1] = true;
}
if(lastPressed==3){
if(trackRecorded[2]==false){
Serial.println("Registro per la prima volta la traccia numero 3");
cases = 1;
isRecording = true;
isOverdubbing = false;
}
if(trackRecorded[2]==true){
if(++cont[0]>2) {cont[0] = 1;}
switch (cont[0]){
case 1:
Serial.println("Overdub sulla traccia numero 3");
cases = 2;
isRecording = false;
isOverdubbing = true;
break;
case 2:
Serial.println("Fine overdub sulla traccia numero 3");
cases = 0;
isRecording = false;
isOverdubbing = false;
break;
}
}
trackRecorded[2] = true;
}
if(lastPressed==4){
if(trackRecorded[3]==false){
Serial.println("Registro per la prima volta la traccia numero 4");
cases = 1;
isRecording = true;
isOverdubbing = false;
}
if(trackRecorded[3]==true){
if(++cont[0]>2) {cont[0] = 1;}
switch (cont[0]){
case 1:
Serial.println("Overdub sulla traccia numero 4");
cases = 2;
isRecording = false;
isOverdubbing = true;
break;
case 2:
Serial.println("Fine overdub sulla traccia numero 4");
cases = 0;
isRecording = false;
isOverdubbing = true;
break;
}
}
trackRecorded[3] = true;
}
}
}
}
oldState[0] = state[0];
}
//Ring circle scene
void ringCircle(uint32_t color){
static uint8_t position = 0;
if (ringTimer(60)){
position++;
}
if (position >= NUM_RING){
position = 0;
}
for (int i=0; i<NUM_RING; i++){
fadeToBlackBy(ring, NUM_RING, 2); // From 1 to 10 it set the trail
ring[position] += color;
FastLED.show();
}
}
//Ring static scene
void ringStatic(uint32_t color){
fill_solid (ring, NUM_RING, color);
FastLED.show();
}
//Setting ring colors
void setRingColors(){
switch (ringUpdate){
default:
ringStatic(CRGB::White);
break;
case 1:
ringStatic(CRGB::Red);
lightsMode = 1;
break;
case 2:
ringCircle(CRGB::Green);
lightsMode = 2;
break;
case 3:
ringCircle(CRGB::Red);
lightsMode = 3;
break;
case 4:
ringCircle(CRGB::DarkOrange);
lightsMode = 4;
break;
}
}
void tracksStatic(uint32_t track_1_color, uint32_t track_2_color, uint32_t track_3_color, uint32_t track_4_color){
leds[0] = track_1_color;
leds[1] = track_2_color;
leds[2] = track_3_color;
leds[3] = track_4_color;
FastLED.show();
}
void tracksBlink(uint8_t ledToBlink, uint32_t ledColor){
static bool blinkState = false;
if(ledsTimer(800)){
blinkState = !blinkState;
}
if(blinkState==true){
leds[ledToBlink] = ledColor;
}
if(blinkState==false){
leds[ledToBlink] = CRGB::Black;
}
}
void setTracksColors(){
//DEFAULT
if (cont[3] == 0){
if (lastPressed == 0){
tracksStatic (CRGB::Black, CRGB::Black, CRGB::Black, CRGB::Black);
FastLED.show();
}
if (lastPressed == 1){
tracksStatic (CRGB::White, CRGB::Black, CRGB::Black, CRGB::Black);
FastLED.show();
}
if (lastPressed == 2){
tracksStatic (CRGB::Black, CRGB::White, CRGB::Black, CRGB::Black);
FastLED.show();
}
if (lastPressed == 3){
tracksStatic (CRGB::Black, CRGB::Black, CRGB::White, CRGB::Black);
FastLED.show();
}
if (lastPressed == 4){
tracksStatic (CRGB::Black, CRGB::Black, CRGB::Black, CRGB::White);
FastLED.show();
}
}
//Tracks Selected in REC mode
if ((cont[3] == 1) && (isRecording == false) && (isOverdubbing == false)){
//TRACK 1 SELECTED FIRST REC
if ((lastPressed == 1) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Red, CRGB::Black, CRGB::Black, CRGB::Black);
}
if ((lastPressed == 1) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Red, CRGB::Green, CRGB::Black, CRGB::Black);
}
if ((lastPressed == 1) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Red, CRGB::Black, CRGB::Green, CRGB::Black);
}
if ((lastPressed == 1) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Red, CRGB::Black, CRGB::Black, CRGB::Green);
}
if ((lastPressed == 1) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Red, CRGB::Black, CRGB::Green, CRGB::Green);
}
if ((lastPressed == 1) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Red, CRGB::Green, CRGB::Black, CRGB::Green);
}
if ((lastPressed == 1) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Red, CRGB::Green, CRGB::Green, CRGB::Black);
}
if ((lastPressed == 1) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Red, CRGB::Green, CRGB::Green, CRGB::Green);
}
//TRACK 1 SELECTED OVERDUB
if ((lastPressed == 1) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::DarkOrange, CRGB::Black, CRGB::Black, CRGB::Black);
}
if ((lastPressed == 1) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::DarkOrange, CRGB::Green, CRGB::Black, CRGB::Black);
}
if ((lastPressed == 1) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::DarkOrange, CRGB::Black, CRGB::Green, CRGB::Black);
}
if ((lastPressed == 1) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::DarkOrange, CRGB::Black, CRGB::Black, CRGB::Green);
}
if ((lastPressed == 1) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::DarkOrange, CRGB::Black, CRGB::Green, CRGB::Green);
}
if ((lastPressed == 1) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::DarkOrange, CRGB::Green, CRGB::Black, CRGB::Green);
}
if ((lastPressed == 1) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::DarkOrange, CRGB::Green, CRGB::Green, CRGB::Black);
}
if ((lastPressed == 1) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::DarkOrange, CRGB::Green, CRGB::Green, CRGB::Green);
}
//TRACK 2 SELECTED FIRST REC
if ((lastPressed == 2) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Black, CRGB::Red, CRGB::Black, CRGB::Black);
}
if ((lastPressed == 2) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Green, CRGB::Red, CRGB::Black, CRGB::Black);
}
if ((lastPressed == 2) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Black, CRGB::Red, CRGB::Green, CRGB::Black);
}
if ((lastPressed == 2) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Black, CRGB::Red, CRGB::Black, CRGB::Green);
}
if ((lastPressed == 2) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Black, CRGB::Red, CRGB::Green, CRGB::Green);
}
if ((lastPressed == 2) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Green, CRGB::Red, CRGB::Black, CRGB::Green);
}
if ((lastPressed == 2) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Green, CRGB::Red, CRGB::Green, CRGB::Black);
}
if ((lastPressed == 2) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Green, CRGB::Red, CRGB::Green, CRGB::Green);
}
//TRACK 2 SELECTED OVERDUB
if ((lastPressed == 2) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Black, CRGB::DarkOrange, CRGB::Black, CRGB::Black);
}
if ((lastPressed == 2) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Green, CRGB::DarkOrange, CRGB::Black, CRGB::Black);
}
if ((lastPressed == 2) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Black, CRGB::DarkOrange, CRGB::Green, CRGB::Black);
}
if ((lastPressed == 2) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Black, CRGB::DarkOrange, CRGB::Black, CRGB::Green);
}
if ((lastPressed == 2) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Black, CRGB::DarkOrange, CRGB::Green, CRGB::Green);
}
if ((lastPressed == 2) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Green, CRGB::DarkOrange, CRGB::Black, CRGB::Green);
}
if ((lastPressed == 2) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Green, CRGB::DarkOrange, CRGB::Green, CRGB::Black);
}
if ((lastPressed == 2) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Green, CRGB::DarkOrange, CRGB::Green, CRGB::Green);
}
//TRACK 3 SELECTED FIRST REC
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Black, CRGB::Black, CRGB::Red, CRGB::Black);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Green, CRGB::Black, CRGB::Red, CRGB::Black);
}
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Black, CRGB::Green, CRGB::Red, CRGB::Black);
}
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Black, CRGB::Black, CRGB::Red, CRGB::Green);
}
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Black, CRGB::Green, CRGB::Red, CRGB::Green);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Green, CRGB::Black, CRGB::Red, CRGB::Green);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Green, CRGB::Green, CRGB::Red, CRGB::Black);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Green, CRGB::Green, CRGB::Red, CRGB::Green);
}
//TRACK 3 SELECTED OVERDUB
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Black, CRGB::Black, CRGB::DarkOrange, CRGB::Black);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Green, CRGB::Black, CRGB::DarkOrange, CRGB::Black);
}
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Black, CRGB::Green, CRGB::DarkOrange, CRGB::Black);
}
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Black, CRGB::Black, CRGB::DarkOrange, CRGB::Green);
}
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Black, CRGB::Green, CRGB::DarkOrange, CRGB::Green);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Green, CRGB::Black, CRGB::DarkOrange, CRGB::Green);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Green, CRGB::Green, CRGB::DarkOrange, CRGB::Black);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Green, CRGB::Green, CRGB::DarkOrange, CRGB::Green);
}
//TRACK 4 SELECTED BEFORE FIRST REC
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Black, CRGB::Black, CRGB::Black, CRGB::Red);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Green, CRGB::Black, CRGB::Black, CRGB::Red);
}
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Black, CRGB::Green, CRGB::Black, CRGB::Red);
}
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Black, CRGB::Black, CRGB::Green, CRGB::Red);
}
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Black, CRGB::Green, CRGB::Green, CRGB::Red);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Green, CRGB::Black, CRGB::Green, CRGB::Red);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Green, CRGB::Green, CRGB::Black, CRGB::Red);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Green, CRGB::Green, CRGB::Green, CRGB::Red);
}
//TRACK 4 SELECTED OVERDUB
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Black, CRGB::Black, CRGB::Black, CRGB::DarkOrange);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Green, CRGB::Black, CRGB::Black, CRGB::DarkOrange);
}
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Black, CRGB::Green, CRGB::Black, CRGB::DarkOrange);
}
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Black, CRGB::Black, CRGB::Green, CRGB::DarkOrange);
}
if ((lastPressed == 3) && (trackRecorded[0] == false) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Black, CRGB::Green, CRGB::Green, CRGB::DarkOrange);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Green, CRGB::Black, CRGB::Green, CRGB::DarkOrange);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Green, CRGB::Green, CRGB::Black, CRGB::DarkOrange);
}
if ((lastPressed == 3) && (trackRecorded[0] == true) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Green, CRGB::Green, CRGB::Green, CRGB::DarkOrange);
}
}
if ((cont[3] == 1) && (isRecording == true) && (isOverdubbing == false)) {
//TRACK 1 IS RECORDING
if ((lastPressed == 1) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Red, CRGB::Black, CRGB::Black, CRGB::Black);
}
if ((lastPressed == 1) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Red, CRGB::Green, CRGB::Black, CRGB::Black);
}
if ((lastPressed == 1) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Red, CRGB::Black, CRGB::Green, CRGB::Black);
}
if ((lastPressed == 1) && (trackRecorded[1] == false) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Red, CRGB::Black, CRGB::Black, CRGB::Green);
}
if ((lastPressed == 1) && (trackRecorded[1] == false) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Red, CRGB::Black, CRGB::Green, CRGB::Green);
}
if ((lastPressed == 1) && (trackRecorded[1] == true) && (trackRecorded[2] == false) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Red, CRGB::Green, CRGB::Black, CRGB::Green);
}
if ((lastPressed == 1) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == false)){
tracksStatic (CRGB::Red, CRGB::Green, CRGB::Green, CRGB::Black);
}
if ((lastPressed == 1) && (trackRecorded[1] == true) && (trackRecorded[2] == true) && (trackRecorded[3] == true)){
tracksStatic (CRGB::Red, CRGB::Green, CRGB::Green, CRGB::Green);
}
}
}
/*
@LIGHTS PINS:
Pin 13 - Neopixel ring (leds of ring from 0 to 15)
Pin 12 - Neopixel leds (leds from 0 to 5)
- Led 0 = Track 1;
- Led 1 = Track 2;
- Led 2 = Track 3;
- Led 3 = Track 4;
- Led 4 = Bank;
- Led 5 = Clear;
@BUTTONS PINS: @Variables for buttons:
Pin 11 - Play/Rec button; | button[0], state[0], oldState[0], cont[0], pressed[0];
Pin 10 - Stop button; | button[1], state[1], oldState[1], cont[1], pressed[1];
Pin 9 - Undo button; | button[2], state[2], oldState[2], cont[2], pressed[2];
Pin 8 - Mode button; | button[3], state[3], oldState[3], cont[3], pressed[3];
Pin 7 - Track 1 button; | button[4], state[4], oldState[4], cont[4], pressed[4], lastPressed(=1), trackRecorded[0] |
Pin 6 - Track 2 button; | button[5], state[5], oldState[5], cont[5], pressed[5], lastPressed(=2), trackRecorded[1] | oneTrackSelected;
Pin 5 - Track 3 button; | button[6], state[6], oldState[6], cont[6], pressed[6], lastPressed(=3), trackRecorded[2] |
Pin 4 - Track 4 button; | button[7], state[7], oldState[7], cont[7], pressed[7], lastPressed(=4); trackRecorded[3] |
Pin 3 - Bank button; | button[8], state[8], oldState[8], cont[8], pressed[8];
Pin 2 - Clear button; | button[9], state[9], oldState[9], cont[9], pressed[9];
*/