Version 2

This commit is contained in:
Ingo Rohlf 2024-08-17 12:43:47 +02:00
parent e78fde8057
commit 36d9ac17e2
3 changed files with 171 additions and 647 deletions

View file

@ -1,518 +0,0 @@
#include <Arduino.h>
#include "./Timer1.h"
#include "CubeRegister.h"
typedef void(*CubeEffects)(unsigned int frame);
#define CUBESIZE 5
//ShiftRegisterSlow Register ;
CubeRegister Register ;
#define FPS 60
#define LEDLEVEL 8
byte cube[CUBESIZE][CUBESIZE][CUBESIZE];
volatile unsigned long frame = 0;
unsigned long start;
unsigned long ende;
class LED {
public:
byte x;
byte y;
byte z;
byte value;
void show() {
cube[x][y][z] = value;
}
void hide() {
cube[x][y][z] = 0;
}
void randomize() {
x = random(CUBESIZE + 1);
y = random(CUBESIZE + 1);
z = random(CUBESIZE + 1);
value = random(LEDLEVEL + 1);
}
};
class Vector {
public:
int dx;
int dy;
int dz;
};
void draw_cube_layer(byte layer, byte level) {
for (byte z = 0; z < CUBESIZE; z++) {
Register.shift_bit(z == layer);
}
for (byte x = 0; x < CUBESIZE; x++) {
for (byte y = 0; y < CUBESIZE; y++) {
Register.shift_bit((cube[x][y][layer] > level));
}
}
Register.register_to_output();
}
void setup() {
// Disable Arduino's default millisecond counter (from now on, millis(), micros(),
// delay() and delayMicroseconds() will not work)
Serial.begin(115200);
//disableMillis();
Register.reset();
Register.output_enable();
//randomize_cube();
// Prepare Timer1 to count
// On 16 MHz Arduino boards, this function has a resolution of 4us
// On 8 MHz Arduino boards, this function has a resolution of 8us
startTimer1(1000000 / (FPS * LEDLEVEL * CUBESIZE));
//draw_cube_layer(1, 1);
}
/*
void randomize_cube() {
for (byte x = 0; x < CUBESIZE; x++) {
for (byte y = 0; y < CUBESIZE; y++) {
for (byte z = 0; z < CUBESIZE; z++) {
cube[x][y][z] = random(LEDLEVEL + 1);
}
}
}
}
*/
void fill_cube(byte brightness) {
for (byte x = 0; x < CUBESIZE; x++) {
for (byte y = 0; y < CUBESIZE; y++) {
for (byte z = 0; z < CUBESIZE; z++) {
cube[x][y][z] = min(brightness, LEDLEVEL);
}
}
}
}
/*
void gravity_cube(int x,int y, int z){
for (byte x = 0; x < CUBESIZE; x++) {
for (byte y = 0; y < CUBESIZE; y++) {
for (byte z = 0; z < CUBESIZE; z++) {
cube[x][y][z] = ;
}
}
}
}
*/
void dimm_cube(int diff = -1) {
diff = constrain(diff, -LEDLEVEL, LEDLEVEL);
for (byte x = 0; x < CUBESIZE; x++) {
for (byte y = 0; y < CUBESIZE; y++) {
for (byte z = 0; z < CUBESIZE; z++) {
cube[x][y][z] = constrain( cube[x][y][z] + diff, 0, LEDLEVEL);
/* if (cube[x][y][z] > LEDLEVEL) {
cube[x][y][z] = LEDLEVEL;
} else if (cube[x][y][z] < 0) {
cube[x][y][z] = 0;
}*/
}
}
}
}
const unsigned long CHAR_5BIT[42] = {
0B0111010001111111000110001, // 0 A (97/65)
0B1111110001111101000111111, // 1 B
0B0111110000100001000001111, // 2 C
0B1111010001100011000111110, // 3 D
0B1111110000111101000011111, // 4 E
0B1111110000111001000010000, // 5 F
0B0111110000100111000101111, // 6 G
0B1000110001111111000110001, // 7 H
0B0111000100001000010001110, // 8 I
0B0001100001000011000101111, // 9 J
0B1000110010111001001010001, // 10 K
0B1000010000100001000011111, // 11 L
0B1000111011101011000110001, // 12 M
0B1000111001101011001110001, // 13 N
0B0111010001100011000101110, // 14 O
0B1111010001111101000010000, // 15 P
0B1111110001101011111100010, // 16 Q
0B1111010001111101000110001, // 17 R
0B0111110000011100000111110, // 18 S
0B1111100100001000010000100, // 19 T
0B1000110001100011000101110, // 20 U
0B1000110001010100101000100, // 21 V
0B1000110001101011010101010, // 22 W
0B1000101010001000101010001, // 23 X
0B1000110001010100010000100, // 24 Y
0B1111100010001000100011111, // 25 Z (122/90)
0B0111010011101011100101110, // 26 ZERO (48)
0B0010001100001000010001110, // 27 ONE (49)
0B1111000001011101000011111, // 28 TWO (50)
0B1111000001011100000111110, // 29 THREE
0B0010001000101001111100100, // 30 FOUR
0B1111110000111100000111110, // 31 FIVE
0B1111110000111101000111110, // 32 SIX
0B1111100001000100010000100, // 33 SEVEN
0B0111010001011101000101110, // 34 EIGHT
0B0111010001011110000111110, // 35 NINE (57)
0B0000000000000000000000000, // 36 SPACE (32)
0B0010000100001000000000100, // 37 EXCL (33)
0B0000000100000000000000100, // 38 COLON (58)
0B0000000000000000000000100, // 39 POINT (46)
0B0000000000000000010001000, // 40 COMMA (44)
0B0000001010111110111000100 // 41 @ -> Herz (44)
};
unsigned long char_to_5bits(char zeichen) {
// special chars
switch (zeichen) {
case 32: return CHAR_5BIT[36];
case 33: return CHAR_5BIT[37];
case 58: return CHAR_5BIT[38];
case 46: return CHAR_5BIT[39];
case 44: return CHAR_5BIT[40];
case 64: return CHAR_5BIT[41];
}
// upper case letters
if ((zeichen >= 65) & (zeichen <= 90)) {
return CHAR_5BIT[zeichen - 65];
}
// lower case letters
if ((zeichen >= 97) & (zeichen <= 122)) {
return CHAR_5BIT[zeichen - 97];
}
// digits
if ((zeichen >= 48) & (zeichen <= 57)) {
return CHAR_5BIT[zeichen - 22];
}
}
void write_char(char zeichen, int ebene, byte brightness = LEDLEVEL) {
ebene = constrain(ebene, 0, CUBESIZE - 1);
unsigned long pattern = char_to_5bits(zeichen);
unsigned long mask = 0B1000000000000000000000000;
Serial.println("\nPattern: " + (String)(pattern));
for (byte y = 0; y < CUBESIZE; y++) {
for (byte x = 0; x < CUBESIZE; x++) {
Serial.print( pattern & mask );
if (pattern & mask) {
cube[(CUBESIZE - 1) - x][ebene][y] = brightness ;
} else {
cube[(CUBESIZE - 1) - x][ebene][y] = 0 ;
}
mask >>= 1;
//mask = mask << 1;
}
}
}
void hello_cube(int duration) {
const char* message = "mama ist die beste!@!@@ " ;
for (size_t mp = 0; mp < strlen(message); mp++ ) {
int s = CUBESIZE - 1;
for (int i = 0; i < (CUBESIZE + LEDLEVEL); i++) {
dimm_cube(LEDLEVEL / -2);
write_char(message[mp], max(s, 0), LEDLEVEL);
s--;
delay(50);
}
delay(200);
}
}
void text_cube(const char *message){
for (size_t mp = 0; mp < strlen(message); mp++ ) {
int s = CUBESIZE - 1;
for (int i = 0; i < (CUBESIZE + LEDLEVEL); i++) {
dimm_cube(LEDLEVEL / -2 );
write_char(message[mp], max(s, 0), LEDLEVEL);
s--;
delay(50);
}
delay(200);
}
}
void glow_cube(int duration) {
ende = millis() + duration * 1000;
int glow = 0;
int glch = 1;
fill_cube(glow);
while (millis() < ende) {
glow += glch; // ((ende - millis()) / 200) % (LEDLEVEL + 1);
if (glow <= 0){
glow = 0;
glch = 1;
} else if (glow >= LEDLEVEL){
glow = LEDLEVEL;
glch = -1;
}
fill_cube(glow);
delay(100);
}
}
void glitzer_cube(int duration) {
start = millis();
ende = millis() + duration * 1000;
//while ((millis() - start) < 5000 ) {
while (millis() < ende) {
for (byte x = 0; x < CUBESIZE; x++) {
for (byte y = 0; y < CUBESIZE; y++) {
for (byte z = 0; z < CUBESIZE; z++) {
if (random(2) > 0) {
cube[x][y][z] = LEDLEVEL;
} else {
cube[x][y][z] = 0;
}
}
}
}
delay(50);
}
}
void glitzer_cube_levels(int duration) {
start = millis();
ende = millis() + duration * 1000;
//while ((millis() - start) < 5000 ) {
while (millis() < ende) {
for (byte x = 0; x < CUBESIZE; x++) {
for (byte y = 0; y < CUBESIZE; y++) {
for (byte z = 0; z < CUBESIZE; z++) {
cube[x][y][z] = random(LEDLEVEL + 1);
}
}
}
delay(50);
}
}
void glitzer_fade_cube(int duration) {
int cleanup = 5;
fill_cube(0);
/*for (byte x = 0; x < CUBESIZE; x++) {
for (byte y = 0; y < CUBESIZE; y++) {
for (byte z = 0; z < CUBESIZE; z++) {
cube[x][y][z] = 0;
}
}
}*/
/* for (byte n = 0; n < traces; n++) {
punkt.randomize();
punkt.show();
}
*/
ende = millis() + duration * 1000;
while (millis() < ende) {
//while ((millis() - start) < 10000 ) {
//punkt.randomize();
//punkt.show();
cube[random(CUBESIZE)][random(CUBESIZE)][random(CUBESIZE)] = random(LEDLEVEL + 1);
cube[random(CUBESIZE)][random(CUBESIZE)][random(CUBESIZE)] = random(LEDLEVEL + 1);
delay(25);
cleanup --;
if (cleanup <= 0) {
cleanup = 5;
for (byte x = 0; x < CUBESIZE; x++) {
for (byte y = 0; y < CUBESIZE; y++) {
for (byte z = 0; z < CUBESIZE; z++) {
if (cube[x][y][z] > 0) {
cube[x][y][z] --;
}
}
}
}
}
}
}
void dots_cube(int duration) {
byte x;
byte y;
int speed = 50;
fill_cube(0);
for ( x = 0; x < CUBESIZE; x++) {
for ( y = 0; y < CUBESIZE; y++) {
cube[x][y][0] = LEDLEVEL;
}
}
ende = millis() + duration * 1000;
while (millis() < ende) {
x = random(CUBESIZE);
y = random(CUBESIZE);
if (cube[x][y][0] == 0) {
for (int z = CUBESIZE - 1; z >= 0; --z) {
if (z <= (CUBESIZE - 2))
cube[x][y][z + 2] = 0;
cube[x][y][z + 1] = LEDLEVEL / 2;
cube[x][y][z] = LEDLEVEL;
delay(speed);
}
} else {
for (int z = 1; z < CUBESIZE; z++) {
if (z >= 2)
cube[x][y][z - 2] = 0;
cube[x][y][z - 1] = LEDLEVEL / 2;
cube[x][y][z] = LEDLEVEL;
delay(speed);
}
}
for (byte z = 1; z < CUBESIZE - 1; z++) {
cube[x][y][z] = 0;
}
}
}
void template_cube(int duration) {
// prepare something
ende = millis() + duration * 1000;
while (millis() < ende) {
// manipulate cube[][][]
delay(25);
}
}
void traces_cube() {
start = millis();
int traces = 5;
LED origin[traces];
LED leds[traces];
LED ziel[traces];
int steps[traces];
int pos[traces];
for (byte n = 0; n < traces; n++) {
origin[n] = LED();
origin[n].randomize();
origin[n].z = 0;
leds[n] = LED();
ziel[n] = LED();
ziel[n].randomize();
ziel[n].z = CUBESIZE - 1;
steps[n] = random(5, 20);
pos[n] = 0;
}
for (byte x = 0; x < CUBESIZE; x++) {
for (byte y = 0; y < CUBESIZE; y++) {
for (byte z = 0; z < CUBESIZE; z++) {
cube[x][y][z] = 0;
}
}
}
while ((millis() - start) < 5000 ) {
for (byte n = 0; n < traces; n++) {
leds[n].hide();
pos[n] ++;
leds[n].x = origin[n].x + ( (ziel[n].x - origin[n].x) * pos[n] / steps[n]);
leds[n].y = origin[n].y + ( (ziel[n].y - origin[n].y) * pos[n] / steps[n]);
leds[n].z = (origin[n]).z + ( ((ziel[n]).z - origin[n].z) * pos[n] / steps[n]);
leds[n].show();
}
delay(100);
}
}
void loop() {
int next_duration = random(5, 10);
switch (random(0, 10)) {
case 0:
glow_cube(next_duration);
break;
case 1:
glitzer_cube(next_duration);
break;
case 2:
glitzer_cube_levels(next_duration);
break;
case 3:
glitzer_fade_cube(next_duration);
break;
case 4:
dots_cube(next_duration);
break;
case 5:
text_cube("i@u");
break;
case 6:
text_cube("benjamin");
break;
case 7:
text_cube("annika");
break;
}
/* glitzer_cube(random(5, 20));
glitzer_fade_cube(random(5, 20));
*/
}
// Define the function which will handle the notifications (interrupts)
ISR(timer1Event)
{
// if (Serial)
// Serial.println(frame);
// Reset Timer1 (resetTimer1 should be the first operation for better timer precision)
resetTimer1();
// For a smaller and faster code, the line above could safely be replaced with a call
// to the function resetTimer1Unsafe() as, despite its name, it IS safe to call
// that function in here (interrupts are disabled)
// Make sure to do your work as fast as possible, since interrupts are automatically
// disabled when this event happens (refer to interrupts() and noInterrupts() for
// more information on that)
draw_cube_layer(frame % CUBESIZE, frame % LEDLEVEL);
frame ++;
}

View file

@ -25,35 +25,6 @@ unsigned long start;
unsigned long ende;
class LED {
public:
byte x;
byte y;
byte z;
byte value;
void show() {
cube[x][y][z] = value;
}
void hide() {
cube[x][y][z] = 0;
}
void randomize() {
x = random(CUBESIZE + 1);
y = random(CUBESIZE + 1);
z = random(CUBESIZE + 1);
value = random(LEDLEVEL + 1);
}
};
class Vector {
public:
int dx;
int dy;
int dz;
};
void draw_cube_layer(byte layer, byte level) {
for (byte z = 0; z < CUBESIZE; z++) {
@ -188,58 +159,136 @@ void rotate_ac_cube(int steps) {
};
void rotate_cube(int steps) {
void rotate_cube(int steps, unsigned int frame_delay = 100) {
byte x = 0;
byte y = 0;
byte backup;
for (int s = 0 ; s <= steps; s++) {
for (int s = 0 ; s < steps; s++) {
for (byte z = 0; z < CUBESIZE; z++) {
Serial.println("--------------- GO ---------");
Serial.println("Backup: 0,0" + (String)(backup));
backup = cube[0][0][z];
// shift west-side y=0, x=0..max
Serial.println("Vorne");
y = 0;
for ( x = 1; x < CUBESIZE - 1; x++) {
Serial.println("x" + (String)(x - 1) + ",y" + (String)y + " <= " + "x" + (String)x + ",y" + (String)y);
cube[x][y][z] = cube[x - 1][y][z];
// 0,0 -> 0,4 : v
x = 0;
for (y = 1; y < CUBESIZE ; y++) {
cube[x][y - 1][z] = cube[x][y][z];
};
// shift north-side y=0..max, x = max
Serial.println("Links");
y = CUBESIZE - 1;
for (x = 1; x < CUBESIZE ; x++) {
cube[x - 1][y][z] = cube[x][y][z];
}
x = CUBESIZE - 1;
for (y = 1; y < CUBESIZE - 1; y++) {
Serial.println("x" + (String)(x) + ",y" + (String)(y - 1) + " <= " + "x" + (String)x + ",y" + (String)y);
cube[x][y][z] = cube[x][y - 1][z];
}
/*
// shift east-side y=max, x=max..1
Serial.println("Hinten");
y = CUBESIZE - 1;
for (x = CUBESIZE - 1 ; x < 1 ; --x) {
Serial.println("x" + (String)(x + 1) + ",y" + (String)y + " <= " + "x" + (String)x + ",y" + (String)y);
cube[x][y][z] = cube[x][y][z];
for (y = CUBESIZE - 2 ; y < CUBESIZE ; --y) {
cube[x][y + 1][z] = cube[x][y][z] ;
}
x = 0;
Serial.println("Rechts");
for (y = CUBESIZE - 1 ; y > 1; --y) {
Serial.println("x" + (String)(x) + ",y" + (String)(y + 1) + " <= " + "x" + (String)x + ",y" + (String)y);
cube[x][y][z] = cube[x][y - 1][z];
y = 0 ;
for (x = CUBESIZE - 2 ; x < CUBESIZE ; --x) {
cube[x + 1][y][z] = cube[x][y][z];
}
*/
Serial.println("Backup: x0,y1 <= " + (String)(backup));
cube[0][1][z] = backup;
cube[1][0][z] = backup;
}
delay(50);
delay(frame_delay);
}
};
const unsigned long CHAR_5BIT[42] = {
const unsigned long CHAR_5BIT[] = {
0B0000000000000000000000000, // 36 SPACE (32)
0B0010000100001000000000100, // 37 ! (33)
0B0000001010010100000000000, // 36 " (34)
0B0101011111010101111101010, // 36 # (35)
0B0111010100011100010101110, // 36 $ (36)
0B0000101010001000101010000, // 36 % (37)
0B1000001100011001001011100, // 36 & (38) ??
0B0010000100000000000000000, // 36 '(39)
0B0001000100001000010000010, // 36 ( (40)
0B0100000100001000010001000, // 36 ) (41)
0B0000000100011100101000000, // 36 * (42)
0B0000000100011100010000000, // 36 + (43)
0B0000000000000000010001000, // 36 , (44)
0B0000000000011100000000000, // 36 - (45)
0B0000000000000000000000100, // 39 . (46)
0B0000100010001000100010000, // 36 / (45)
0B0111010011101011100101110, // 26 0 (48)
0B0010001100001000010001110, // 27 1 (49)
0B1111000001011101000011111, // 28 2 (50)
0B1111000001011100000111110, // 29 3
0B0010001000101001111100100, // 30 4
0B1111110000111100000111110, // 31 5
0B1111110000111101000111110, // 32 6
0B1111100001000100010000100, // 33 7
0B0111010001011101000101110, // 34 8
0B0111010001011110000111110, // 35 9 (57)
0B0000000100000000000000100, // 38 : (58)
0B0000000100000000010001000, // 38 ; (59)
0B0000100010001000000000001, // 38 < (60)
0B0000001110000000111000000, // 36 = (61)
0B1000001000001000100010000, // 38 > (62)
0B0111010001001100000000100, // 38 ? (63)
0B0111010111100010111001100, // 38 @ (64
0B0111010001111111000110001, // 0 A (97/65)
0B1111110001111101000111111, // 1 B
0B0111110000100001000001111, // 2 C
0B1111010001100011000111110, // 3 D
0B1111110000111101000011111, // 4 E
0B1111110000111001000010000, // 5 F
0B0111110000100111000101111, // 6 G
0B1000110001111111000110001, // 7 H
0B0111000100001000010001110, // 8 I
0B0001100001000011000101111, // 9 J
0B1000110010111001001010001, // 10 K
0B1000010000100001000011111, // 11 L
0B1000111011101011000110001, // 12 M
0B1000111001101011001110001, // 13 N
0B0111010001100011000101110, // 14 O
0B1111010001111101000010000, // 15 P
0B1111110001101011111100010, // 16 Q
0B1111010001111101000110001, // 17 R
0B0111110000011100000111110, // 18 S
0B1111100100001000010000100, // 19 T
0B1000110001100011000101110, // 20 U
0B1000110001010100101000100, // 21 V
0B1000110001101011010101010, // 22 W
0B1000101010001000101010001, // 23 X
0B1000110001010100010000100, // 24 Y
0B1111100010001000100011111, // 25 Z (122/90)
0B0011100100001000010000111, // 38 [ (91)
0B1000001000001000001000001, // 38 \ (92)
0B1110000100001000010011100, // 38 ] (93)
0B0010001001000000000000000, // 36 ^ (94)
0B0000000000000000000011111, // 36 _ (95)
0B0010000001000000000000000, // 36 ` (96)
0B0011000100011000010000110, // 36 { (123)
0B0010000100001000010000100, // 36 | (124)
0B0110000100001100010001100, // 36 } (125)
0B0000001000101010001000000, // 36 ~ (126)
0B0000001010111110111000100 // 41 @ -> Herz (44)
};
unsigned long char_to_5bits(char zeichen) {
// upper case letters + digits
if ((zeichen >= 32) & (zeichen <= 96)) {
return CHAR_5BIT[zeichen - 32];
}
// lower case letters
if ((zeichen >= 97) & (zeichen <= 122)) {
return CHAR_5BIT[zeichen - 64];
}
// digits
if ((zeichen >= 123) & (zeichen <= 126)) {
return CHAR_5BIT[zeichen - 22];
}
return CHAR_5BIT[69];
}
// 5 * 5 bits/row, top to bottom
/*
const unsigned long CHAR_5BIT[42] = {
0B0111010001111111000110001, // 0 A (97/65)
0B1111110001111101000111111, // 1 B
0B0111110000100001000001111, // 2 C
@ -282,9 +331,9 @@ const unsigned long CHAR_5BIT[42] = {
0B0000000000000000000000100, // 39 POINT (46)
0B0000000000000000010001000, // 40 COMMA (44)
0B0000001010111110111000100 // 41 @ -> Herz (44)
};
unsigned long char_to_5bits(char zeichen) {
};
*/
unsigned long char_to_5bits__(char zeichen) {
// special chars
switch (zeichen) {
case 32: return CHAR_5BIT[36];
@ -328,6 +377,40 @@ void write_char(char zeichen, int ebene = 0, byte brightness = LEDLEVEL) {
}
}
void banner_cube(const char *message, int frame_delay = 100) {
unsigned long pattern;// = char_to_5bits(zeichen);
unsigned long mask;// = 0B1000000000000000000000000;
for (size_t mp = 0; mp < strlen(message); mp++ ) {
pattern = char_to_5bits(message[mp]);
mask = 0B1000000000000000000000000;
for (byte y = 0; y < CUBESIZE; y++) {
mask = 0B1000000000000000000000000;
mask >>= y;// * CUBESIZE;
for (byte z = 0; z < CUBESIZE; z++) {
if (pattern & mask) {
cube[0][CUBESIZE - 1][z] = LEDLEVEL;
} else {
cube[0][CUBESIZE - 1][z] = 0;
}
cube[CUBESIZE - 1][CUBESIZE - 1][z] = 0;
mask >>= CUBESIZE;
}
rotate_cube(1, 150);
}
rotate_cube(1, 150);
}
for (byte cols = 0; cols < (CUBESIZE * 3 - 2); cols++) {
for (byte z = 0; z < CUBESIZE; z++) {
cube[CUBESIZE - 1][CUBESIZE - 1][z] = 0;
}
rotate_cube(1, 150);
}
}
void hello_cube(int duration) {
@ -343,6 +426,7 @@ void hello_cube(int duration) {
}
delay(200);
}
fill_cube(0);
}
void text_cube(const char *message) {
@ -358,6 +442,7 @@ void text_cube(const char *message) {
delay(200);
}
fill_cube(0);
}
void glow_cube(int duration) {
@ -499,13 +584,7 @@ void dots_cube(int duration) {
for (byte z = 1; z < CUBESIZE - 1; z++) {
cube[x][y][z] = 0;
}
}
}
void template_cube(int duration) {
@ -517,55 +596,13 @@ void template_cube(int duration) {
}
}
void traces_cube() {
start = millis();
int traces = 5;
LED origin[traces];
LED leds[traces];
LED ziel[traces];
int steps[traces];
int pos[traces];
for (byte n = 0; n < traces; n++) {
origin[n] = LED();
origin[n].randomize();
origin[n].z = 0;
leds[n] = LED();
ziel[n] = LED();
ziel[n].randomize();
ziel[n].z = CUBESIZE - 1;
steps[n] = random(5, 20);
pos[n] = 0;
}
for (byte x = 0; x < CUBESIZE; x++) {
for (byte y = 0; y < CUBESIZE; y++) {
for (byte z = 0; z < CUBESIZE; z++) {
cube[x][y][z] = 0;
}
}
}
while ((millis() - start) < 5000 ) {
for (byte n = 0; n < traces; n++) {
leds[n].hide();
pos[n] ++;
leds[n].x = origin[n].x + ( (ziel[n].x - origin[n].x) * pos[n] / steps[n]);
leds[n].y = origin[n].y + ( (ziel[n].y - origin[n].y) * pos[n] / steps[n]);
leds[n].z = (origin[n]).z + ( ((ziel[n]).z - origin[n].z) * pos[n] / steps[n]);
leds[n].show();
}
delay(100);
}
}
// const char* messages = {"I°U", "mama ist die allerbeste!°!°", "benjamin", "annika", "5x5x5 led-cube"};
static const char* const messages[] = {"I°U", "mama ist die allerbeste!°!°", "benjamin", "annika", "5x5x5 led-cube"};
int message_count = 5;
void loop() {
int next_duration = random(5, 10);
switch (random(8, 10)) {
int next_duration = random(10, 20);
switch (random(0, 10)) {
case 0:
glow_cube(next_duration);
break;
@ -581,21 +618,26 @@ void loop() {
case 4:
dots_cube(next_duration);
break;
case 5:
text_cube("i@u");
break;
case 6:
text_cube("benjamin");
banner_cube(messages[random(message_count)]);
break;
case 7:
text_cube("annika");
text_cube(messages[random(message_count)]);
break;
/*
case 8:
write_char('g');
if (random(10) > 5)
text_cube("LED-Cube 5*5*5");
else
banner_cube("LED-Cube 5*5*5 ");
rotate_cube(20);
fill_cube(0);
*/
/*write_char('v', 0);
write_char('x', 4);
rotate_cube(10);
fill_cube(0);*/
}