Grumpy_Mike:
It depends what plane you want to display your letters in. The best way is to have a lookup table to translate between your display bits and the LED number.
Due to the number of possible display orientations this requires a multi dimensional array.
Ive got it to work, thanks. If anyone is interested here is the code:
#include <FastLED.h>
#define DATA_PIN 5
#define NUM_LEDS 25
CRGB leds[NUM_LEDS];
#define UPDATES_PER_SECOND 100
byte VLayer1[] = {0, 1, 2, 3, 4, 25, 26, 27, 28, 29, 50, 51, 52, 53, 54, 75, 76, 77, 78, 79, 100, 101, 102, 103, 104};
byte VLayer2[] = {9, 8, 7, 6, 5, 34, 33, 32, 31, 30, 59, 58, 57, 56, 55, 84, 83, 82, 81, 80, 109, 108, 107, 106, 105};
byte VLayer3[] = {10, 11, 12, 13, 14, 35, 36, 37, 38, 39, 60, 61, 62, 63, 64, 85, 86, 87, 88, 89, 110, 111, 112, 113, 114};
byte VLayer4[] = {19, 18, 17, 16, 15, 44, 43, 42, 41, 40, 69, 68, 67, 66, 65, 94 , 93 , 92 , 91, 90, 119, 118, 117, 116, 115};
byte VLayer5[] = {20, 21, 22, 23, 24, 45, 46, 47, 48, 49, 70, 71, 72, 73, 74, 95, 96, 97, 98, 99, 120, 121, 122, 123, 124};
byte HLayer1[] = {0, 1, 2, 3, 4, 9, 8, 7, 6, 5, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15, 20, 21, 22, 23, 24};
byte HLayer2[] = {25, 26, 27, 28, 29, 34, 33, 32, 31, 30, 35, 36, 37, 38, 39, 44, 43, 42, 41, 40, 45, 46, 47, 48, 49};
byte HLayer3[] = {50, 51, 52, 53, 54, 59, 58, 57, 56, 55, 60, 61, 62, 63, 64, 69, 68, 67, 66, 65, 70, 71, 72, 73, 74};
byte HLayer4[] = {75, 76, 77, 78, 79, 84, 83, 82, 81, 80, 85, 86, 87, 88, 89, 94, 93, 92, 91, 90, 95, 96, 97, 98, 99};
byte HLayer5[] = {100, 101, 102, 103, 104, 109, 108, 107, 106, 105, 110, 111, 112, 113, 114, 119, 118, 117, 116, 115, 120, 121, 122, 123, 124};
byte A[] = {100, 0, 100, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0};
byte B[] = {100, 0, 100, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0};
byte C[] = {100, 0, 100, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0};
byte D[] = {100, 0, 100, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0};
byte E[] = {100, 0, 100, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0};
byte F[] = {100, 0, 100, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0};
byte G[] = {100, 0, 100, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0};
byte H[] = {100, 0, 100, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1};
byte I[] = {100, 0, 100, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0};
byte J[] = {100, 0, 100, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1};
byte K[] = {100, 0, 100, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1};
byte L[] = {100, 0, 100, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0};
byte M[] = {100, 0, 100, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0};
byte N[] = {100, 0, 100, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1};
byte O[] = {100, 0, 100, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0};
byte P[] = {100, 0, 100, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0};
byte Q[] = {100, 0, 100, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0};
byte R[] = {100, 0, 100, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0};
byte S[] = {100, 0, 100, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1};
byte T[] = {100, 0, 100, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1};
byte U[] = {100, 0, 100, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1};
byte V[] = {100, 0, 100, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1};
byte W[] = {100, 0, 100, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1};
byte X[] = {100, 0, 100, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1};
byte Y[] = {100, 0, 100, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1};
byte Z[] = {100, 0, 100, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1};
byte DASH[] = {100, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
byte COL[] = {100, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0};
byte EMPTY[] = {100, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
byte FULL[] = {100, 0, 100, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
byte SMILE[] = {100, 0, 100, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0};
byte COLDOT[] = {100, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0};
byte CHECK[] = {100, 0, 100, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1};
byte CHECK2[] = {100, 0, 100, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0};
byte DOT[] = {100, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
const byte* levels[] = {VLayer1, VLayer2, VLayer3, VLayer4, VLayer5, HLayer1, HLayer2, HLayer3, HLayer4, HLayer5};
byte* letters[] = {A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, DASH, COL, EMPTY, FULL, SMILE, COLDOT, CHECK, CHECK2, DOT};
CRGB CRGBarray[25];
int Delay = 1000;
int Red, Green, Blue, Number;
void setup() {
Serial.begin(115200);
FastLED.show(CRGB::Black);
FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);
}
void loop() {
if (Serial.available() > 0) {
int plane = Serial.parseInt();
int letter = Serial.parseInt();
int Red = Serial.parseInt();
int Green = Serial.parseInt();
int Blue = Serial.parseInt();
Serial.print("Plane: ");
Serial.println(plane);
Serial.print("Letter: ");
Serial.println(letters[letter][]);
Serial.print("Red: ");
Serial.println(Red);
Serial.print("Green: ");
Serial.println(Green);
Serial.print("Blue: ");
Serial.println(Blue);
Setplane(plane, letter, Red, Green, Blue);
//delay(Delay);
}
}
void Setplane(int pane, char Letter, int R, int G, int B) {
letters[Letter][0] = R;
letters[Letter][1] = G;
letters[Letter][2] = B;
Setletter(Letter, pane);
}
void Setletter(int curletter, int curheight) {
int counter = 0;
for (int lednum = 0; lednum < NUM_LEDS; lednum++) {
setled(curheight, lednum, Red = letters[curletter][0] * letters[curletter][counter + 3], Green = letters[curletter][1] * letters[curletter][counter + 3], Blue = letters[curletter][2] * letters[curletter][counter + 3]);
/*Serial.println(counter);
Serial.println(Red);
Serial.println(Green);
Serial.println(Blue);
Serial.println();
//delay(Delay);*/
counter++;
}
}
void setled(int Currentheight, int Lednumber, int Redcolour, int Greencolour, int Bluecolour) {
CRGBarray[Lednumber].red = Redcolour;
CRGBarray[Lednumber].green = Greencolour;
CRGBarray[Lednumber].blue = Bluecolour;
leds[levels[Currentheight][Lednumber]] = CRGBarray[Lednumber];
/*Serial.println(Lednumber);
Serial.println(CRGBarray[Lednumber]);*/
// Show the leds
FastLED.show();
}