Hi everybody,
I will try to explain...
I use 8 encoders with 8 leds rings.
This works but when i send CC1 on channel 2, the led ring corresponding to channel 1 moves like ignoring the channel...
When i send CC 2 channel 2 the second encoder's leds moves.
Also the first led ring works good and the others are very slow. Do i need to use separate datas like in ArrayOfLedArrays from fastled
This is just a smaller program where i'm having troubles
#include <FastLED.h>
#define DATA_PIN 13
#define NUM_LEDS 64
#define NUM_ENCODERS 8
CRGB leds[NUM_LEDS];
long LEDSCOLOR=0xFFFFFF;
uint8_t BRIGHTNESS=10;
int counterencoder[NUM_ENCODERS] = {0, 0, 0, 0, 0, 0, 0, 0};
int CHANNEL_NUMBER_ENCODER[NUM_ENCODERS] = {};
int CHANNEL_NUMBER[NUM_ENCODERS] = {176,177,178,179,180,181,182,183};
int CC_NUMBER[NUM_ENCODERS] = {1,2,3,4,5,6,7,8};
int CC_VALUE[NUM_ENCODERS] = {};
byte state = 0;
byte statusByte;
byte statusByteIN;
byte dataByte1;
byte dataByte2;
int COLORVALUE=0;
int BRIGHTNESSVALUE=10;
void setup() {
// put your setup code here, to run once:
Serial.begin (31250);
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
}
void loop() {
// put your main code here, to run repeatedly:
MidiIn();
}
void MidiIn(){
for (int i=0; i<NUM_ENCODERS; i++){
while (Serial.available() > 0) {
byte incomingByte = Serial.read();
switch (state){
case 0:
if (incomingByte == CHANNEL_NUMBER[i]){
statusByteIN = incomingByte;
state=1;
}
else state=0;
case 1:
if(incomingByte < 0x80 /*&& statusByteIN == CHANNEL_NUMBER[i]*/) {
dataByte1 = incomingByte;
state = 2;
}
else state=0;
break;
case 2:
if(dataByte1 == CC_NUMBER[i]/* && statusByteIN == CHANNEL_NUMBER[i]*/) {
dataByte2 = incomingByte;
CC_VALUE[i]=dataByte2;
counterencoder[i]=CC_VALUE[i];
}
ledsdisplay();
state = 0;
break;
}
}
}
}
void ledsdisplay(){
switch (COLORVALUE) {
case 0:
LEDSCOLOR=0xFF0000;
break;
case 1:
LEDSCOLOR=0x008000;
break;
case 2:
LEDSCOLOR=0x0000FF;
break;
case 3:
LEDSCOLOR=0xFFFF00;
break;
case 4:
LEDSCOLOR=0xFF4500;
break;
case 5:
LEDSCOLOR=0x800080;
break;
case 6:
LEDSCOLOR=0x87CEEB;
break;
case 7:
LEDSCOLOR=0xFFFFFF;
break;
}
for (int i=0; i<NUM_ENCODERS; i++){
BRIGHTNESS = BRIGHTNESSVALUE;
FastLED.setBrightness( BRIGHTNESS );
if(0<=counterencoder[i] && counterencoder[i]<=15){
leds[i*NUM_ENCODERS+7] = CRGB::Black;
leds[i*NUM_ENCODERS+6] = CRGB::Black;
leds[i*NUM_ENCODERS+5] = CRGB::Black;
leds[i*NUM_ENCODERS+4] = CRGB::Black;
leds[i*NUM_ENCODERS+3] = CRGB::Black;
leds[i*NUM_ENCODERS+2] = CRGB::Black;
leds[i*NUM_ENCODERS+1] = LEDSCOLOR;
leds[i*NUM_ENCODERS+0] = CRGB::Black;
}
if(16<=counterencoder[i] && counterencoder[i]<=31){
leds[i*NUM_ENCODERS+7] = CRGB::Black;
leds[i*NUM_ENCODERS+6] = CRGB::Black;
leds[i*NUM_ENCODERS+5] = CRGB::Black;
leds[i*NUM_ENCODERS+4] = CRGB::Black;
leds[i*NUM_ENCODERS+3] = CRGB::Black;
leds[i*NUM_ENCODERS+2] = CRGB::Black;
leds[i*NUM_ENCODERS+1] = CRGB::Black;
leds[i*NUM_ENCODERS+0] = LEDSCOLOR;
}
if(32<=counterencoder[i] && counterencoder[i]<=47){
leds[i*NUM_ENCODERS+7] = LEDSCOLOR;
leds[i*NUM_ENCODERS+6] = CRGB::Black;
leds[i*NUM_ENCODERS+5] = CRGB::Black;
leds[i*NUM_ENCODERS+4] = CRGB::Black;
leds[i*NUM_ENCODERS+3] = CRGB::Black;
leds[i*NUM_ENCODERS+2] = CRGB::Black;
leds[i*NUM_ENCODERS+1] = CRGB::Black;
leds[i*NUM_ENCODERS+0] = CRGB::Black;
}
if(48<=counterencoder[i] && counterencoder[i]<=63){
leds[i*NUM_ENCODERS+7] = CRGB::Black;
leds[i*NUM_ENCODERS+6] = LEDSCOLOR;
leds[i*NUM_ENCODERS+5] = CRGB::Black;
leds[i*NUM_ENCODERS+4] = CRGB::Black;
leds[i*NUM_ENCODERS+3] = CRGB::Black;
leds[i*NUM_ENCODERS+2] = CRGB::Black;
leds[i*NUM_ENCODERS+1] = CRGB::Black;
leds[i*NUM_ENCODERS+0] = CRGB::Black;
}
if(64<=counterencoder[i] && counterencoder[i]<=79){
leds[i*NUM_ENCODERS+7] = CRGB::Black;
leds[i*NUM_ENCODERS+6] = CRGB::Black;
leds[i*NUM_ENCODERS+5] = LEDSCOLOR;
leds[i*NUM_ENCODERS+4] = CRGB::Black;
leds[i*NUM_ENCODERS+3] = CRGB::Black;
leds[i*NUM_ENCODERS+2] = CRGB::Black;
leds[i*NUM_ENCODERS+1] = CRGB::Black;
leds[i*NUM_ENCODERS+0] = CRGB::Black;
}
if(80<=counterencoder[i] && counterencoder[i]<=95){
leds[i*NUM_ENCODERS+7] = CRGB::Black;
leds[i*NUM_ENCODERS+6] = CRGB::Black;
leds[i*NUM_ENCODERS+5] = CRGB::Black;
leds[i*NUM_ENCODERS+4] = LEDSCOLOR;
leds[i*NUM_ENCODERS+3] = CRGB::Black;
leds[i*NUM_ENCODERS+2] = CRGB::Black;
leds[i*NUM_ENCODERS+1] = CRGB::Black;
leds[i*NUM_ENCODERS+0] = CRGB::Black;
}
if(96<=counterencoder[i] && counterencoder[i]<=111){
leds[i*NUM_ENCODERS+7] = CRGB::Black;
leds[i*NUM_ENCODERS+6] = CRGB::Black;
leds[i*NUM_ENCODERS+5] = CRGB::Black;
leds[i*NUM_ENCODERS+4] = CRGB::Black;
leds[i*NUM_ENCODERS+3] = LEDSCOLOR;
leds[i*NUM_ENCODERS+2] = CRGB::Black;
leds[i*NUM_ENCODERS+1] = CRGB::Black;
leds[i*NUM_ENCODERS+0] = CRGB::Black;
}
if(112<=counterencoder[i] && counterencoder[i]<=127){
leds[i*NUM_ENCODERS+7] = CRGB::Black;
leds[i*NUM_ENCODERS+6] = CRGB::Black;
leds[i*NUM_ENCODERS+5] = CRGB::Black;
leds[i*NUM_ENCODERS+4] = CRGB::Black;
leds[i*NUM_ENCODERS+3] = CRGB::Black;
leds[i*NUM_ENCODERS+2] = LEDSCOLOR;
leds[i*NUM_ENCODERS+1] = CRGB::Black;
leds[i*NUM_ENCODERS+0] = CRGB::Black;
}
}
FastLED.show();
}
Thanks